繁体   English   中英

强制符号到ELF文件的顶部

[英]Forcing a symbol to the top of a ELF file

在通过GCC链接器生成的ELF文件中,ELF文件的顶部始终是可执行代码的版本标识符。

这是通过创建version.c文件并将结果对象文件作为link命令中的第一个可链接对象来实现的。

然而,对于一个可执行文件,它无法工作,我们可以找到的唯一区别是可执行文件包含C和C ++代码的混合,并且版本符号正在其他地方重定位。

因此,有一种方法可以保证符号在ELF文件中的绝对位置,这样符号总是通过链接器命令或代码属性指令位于文件的顶部?

您可以通过脚本控制链接器的输出。 在您的情况下,您可以检查: https//sourceware.org/binutils/docs/ld/SECTIONS.html#SECTIONS以获得可能的解决方案。

例如:

SECTIONS { 
  .version 0x2020 : { version.o }
  .text : { *(.text) }
  .data : { *(.data) } 
  .bss :  { *(.bss)  *(COMMON) } 
} 

这不会控制部分在链接的可执行文件中的确切位置,但它可能会影响它(当处理ROM映像时肯定会这样做),你必须自己试验一下。

在ELF文件的顶部,根据ELF规范 ,它应该是魔术签名0x7f,'E','L','F'。 相反,将您的代码版本放在可执行文件的顶部,我想您可以使用Elf标头中的一些无关紧要的字段,例如ei_pad

struct E_Ident {
  unsigned long ei_magic;       
  unsigned char ei_class;        
  unsigned char ei_data;        
  unsigned char ei_version;      
  unsigned char ei_pad[9];       
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM