· 对于 relocatable (.o) 文件,如果相应的 st_shndx 的值为 SHN_COMMON,则 st_value 保存的是对齐字节数。 · 对于 relocatable (.o) 文件,如果该符号已定义,则 st_value 保存的是该符号在其所定义的 section (由 st_shndx 指定) 中的偏移量。 ·对于可执行和shared object (.so)文件,st_value保存...
· 对于 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的值有些特殊。如...
typedefstruct{Elf64_Wordst_name;/* Symbol name (string tbl index) */unsignedcharst_info;/* Symbol type and binding */unsignedcharst_other;/* Symbol visibility */Elf64_Sectionst_shndx;/* Section index */Elf64_Addrst_value;/* Symbol value */Elf64_Xwordst_size;/* Symbol size */}Elf...
uint16_t e_shnum; // 节头表中的条目数量 uint16_t e_shstrndx; // 节头表中节名称字符串表的条目索引 } ElfN_Ehdr; // N 可为32或64,上面的ElfN_Addr、ElfN_Off同理 e_ident 数组始终以 4 字节的“幻数”开头,以此标识该文件为 ELF 二进制文件。 幻数由十六进制数字 0x7f 组成,后跟字母...
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 /*...
st_shndx 【符号所在段】 st_value 【符号值】 st_size 【符号大小】 相关补充 特殊符号 当我们使用Id 作为链接器来链接生产可执行文件时, 它会为我们定义很多特殊的符号,这些符号并没有在你的程序中定义,但是你可以直接声明并且引用它,我们称之为特殊符号。链接器会在将程序最终链接成可执行文件的时候将其解析...
st_info比较复杂,其高4位表示类型,类型有STT_OBJECT、STT_FUNC、STT_SECTION等几种,其中STT_FUNC才表示这是一个函数符号,低4位表示类型的绑定信息,取值有局部符号、全局符号、弱符号几种。 当为函数符号时,st_shndx表示函数的定义在那个Section中,st_value表示在文件中的具体偏移地址。
第一列Num表示符号表数组的下标,从0开始,共15个符号;第二列Value就是符号值,即st_value;第三列Size为符号大小,即st_size;第四列和第五列分别为符号类型和绑定信息,即对应st_info的低4位和高28位;第六列Vis目前在C/C++语言中未使用,我们可以暂时忽略它;第七列Ndx即st_shndx,表示该符号所属的段;当然最后...