ELF 文件有2种重定位格式,"Rel"和"Rela", 前者较短,记录相对于符号原始值的偏移,后者是记录相对于特定字段的偏移。结构定义如下: image.png r_offset 标识需要重定位的位置,对于可重定位文件,是从节开头到需要被重定位的存储位置的偏移量,对于可执行或共享库,是需要被重定位的存储位置的虚拟地址,单位都是字节 ...
AI代码解释 typedef struct{ELF64_Addr r_offset;Uint64_t r_info;}Elf64_Rel;typedef struct{ELF64_Addr r_offset;Uint64_t r_info;int64_t r_addend;}Elf64_Rela; r_offset指向.o文件中需要指定其在内存中位置的偏移,例如obj1.o中,foo()这条语句编译成汇编指令后是e8 0 0 0 0,e8对应指令call, ...
Elf64_Rel和Elf64_Rela结构体如下所示。其中,r_offset是在重定位时需要被修改的符号的偏移。r_info分为两个部分:type指示如何修改引用,symbol指示应该修改引用为哪个符号。r_addend用于对被修改的引用做偏移调整。有时为了方便程序调试,我们在编译时会使用“-g”选项,此时GCC就会在目标文件中添加许多调试信息,...
ELF节头表是ElfN_Shdr类型的结构体数组,N=32或者64,节头表index就是数组的下标。 typedef struct elf32_shdr { Elf32_Word sh_name; Elf32_Word sh_type; Elf32_Word sh_flags; Elf32_Addr sh_addr; Elf32_Off sh_offset; Elf32_Word sh_size; Elf32_Word sh_link; Elf32_Word sh_info; Elf32...
我们知道ELF文件最开始部分为ELF的头,其64位的结构如下: AI检测代码解析 /* Type for a 16-bit quantity. */ typedef uint16_t Elf64_Half; /* Types for signed and unsigned 32-bit quantities. */ typedef uint32_t Elf64_Word; typedef int32_t Elf64_Sword; ...
RELA:本节是一个重定位节。 HASH/GNU_HASH:本节包含一张哈希表。 DYNAMIC:本节包含的是动态连接信息。 NOTE:本节包含的信息用于以某种方式来标记本文件。 NOBITS:这一节的内容是空的,节并不占用实际的空间。 REL:本节是一个重定位节。 DYNSYM:动态链接符号表信息 ...
} Elf64_Rel; typedef struct { ELF64_Addr r_offset; Uint64_t r_info; int64_t r_addend; } Elf64_Rela; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. r_offset指向.o文件中需要指定其在内存中位置的偏移,例如obj1.o中,foo()这条语句编译成汇编指令后是e8 0 0 0 0,e8对应指令call, 那么“0...
的长度,若节的内容不是数组则设置为0}Elf64_Shdr; 一个x86-64 ELF 可执行文件的 .shstrtab 节属性信息: 1100000003000000//sh_name - sh_type0000000000000000//sh_flags0000000000000000//sh_addr2d38000000000000//sh_offset0301000000000000//sh_size0000000000000000//sh_link - sh_info0100000000000000//sh_addr...
SHT_RELA(SectionHeaderType-Relocation Entries withAddends):此值表明本节是一个重定位节,含有带明确加数(addend)的重定位项,对于 64 位类型的 ELF 文件来说,这个加数就是 Elf64_Rela。一个 ELF 文件可能含有多个重定位节。 SHT_HASH(SectionHeaderType-SymbolHashTable):此值表明本节包含一张哈希表。所有参与...
Elf64_Ehdr中的数据结构含义如下: 我们用readelf -h hello.o看一下从源文件到可执行文件:源文件的预处理、编译、汇编、链接中生成的hello.o文件的ELF头(因为我机器上显示的结果是中文,所以接下来就按照中文来说明,比如ELF头中类别对应Class,类型对应Type)。