强制符号到ELF文件的顶部

use*_*914 6 c c++ linker symbols elf

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

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

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

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

Qwe*_*rty 0

根据 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];       
};
Run Code Online (Sandbox Code Playgroud)