假设现在有一个程序包含 2 个变量:data1、data2 和 2 个函数:func1、func2,找到其地址与数值的过程如下:
1 根据文件头结构 Elf64_Ehdr 中的 e_shoff 得知段表的位置。
2 根据段描述符结构 Elf64_Shdr 中的 sh_offset 得知每个段距离 ELF Header 的偏移量。
3 找到.symtab,根据其符号表结构 Elf64_Sym:
其中 st_shndx 指出符号所在段,根据 Elf64_Shdr 找到对应段的位置, st_value 指出符号在段中的位置, st_size 指出符号的大小。
参考