[英]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.