· 对于 relocatable (.o) 文件,如果相应的 st_shndx 的值为 SHN_COMMON,则 st_value 保存的是对齐字节数。 · 对于 relocatable (.o) 文件,如果该符号已定义,则 st_value 保存的是该符号在其所定义的 section (由 st_shndx 指定) 中的偏移量。 ·对于可执行和shared object (.so)文件,st_value保存...
符号类型和绑定信息(st_info)该成员的低4位标识符号的类型(Symbol Type),高28位标识符号绑定信息(Symbol Binding),如下表所示。 符号所在段(st_shndx)如果符号定义在本目标文件中,那么这个成员表示符号所在段在段表中的下表,但是如果符号不是定义在本目标文件中,或者对于有些特殊符号,sh_shndx的值有些特殊。如...
· 对于 relocatable (.o) 文件,如果相应的 st_shndx 的值为 SHN_COMMON,则 st_value 保存的是对齐字节数。 · 对于 relocatable (.o) 文件,如果该符号已定义,则 st_value 保存的是该符号在其所定义的 section (由 st_shndx 指定) 中的偏移量。 ·对于可执行和shared object (.so)文件,st_value保存...
uint16_t e_shnum; // 节头表中的条目数量 uint16_t e_shstrndx; // 节头表中节名称字符串表的条目索引 } ElfN_Ehdr; // N 可为32或64,上面的ElfN_Addr、ElfN_Off同理 e_ident 数组始终以 4 字节的“幻数”开头,以此标识该文件为 ELF 二进制文件。 幻数由十六进制数字 0x7f 组成,后跟字母 ...
e_shentsize 指明在 Section Header Table 中的每一项的字节大小,e_shnum 指明共有多少项。 11、e_shstrndx 在Section Header Table 中,存储“节名字表”的 Section(就是 .shstrtab 节)所对应的索引。 三、程序头结构: Elf文件从生成到最终的执行过程,会经历很多步骤:编译、重定位、静态链接、加载、动态连接...
e_shnum 节头表项的数量 e_shstrndx 节头表中包含节名字的字符串表索引。 ELF节 节包含了ELF文件中除了文件头,程序段头表,节头表之外的所有内容。 节的索引中有几项是特殊的,比如如下几个: image.png 可以实际看一下节的内容,通过readelf -S 命令就可以看到: ...
sh_name 4字节,偏移值,通过ELF File Header.e_shstrndx拿到节表中节名称表对应项的索引 然后在节表中找到该项,找到sh_offset的文件偏移 sh_name+sh_offset即为该节名的字符串的FOA。 sh_type 4字节,指示节的类型,定义如下: /* Legal values for sh_type (section type). */ #define SHT_NULL 0 /*...
Elf32_Half st_shndx; //给出相关的节区头部表索引。某些索引具有特殊含义。 } Elf32_sym; 2.5.1 st_info st_info 中包含符号类型和绑定信息,操纵方式如: #define ELF32_ST_BIND(i) ((i)>>4) #define ELF32_ST_TYPE(i) ((i)&0xf) #define ELF32_ST_INFO(b, t) (((b)<<4) + ((t...
Elf32_Addr st_value; /* symbol value */ Elf32_Word st_size; /* symbol size */ unsigned char st_info; /* type and binding */ unsigned char st_other; /* 0 - no defined meaning */ Elf32_Half st_shndx; /* section header index */ ...
st_info比较复杂,其高4位表示类型,类型有STT_OBJECT、STT_FUNC、STT_SECTION等几种,其中STT_FUNC才表示这是一个函数符号,低4位表示类型的绑定信息,取值有局部符号、全局符号、弱符号几种。 当为函数符号时,st_shndx表示函数的定义在那个Section中,st_value表示在文件中的具体偏移地址。