Elf 文件格式查找 .got 和 .got.plt 段

逆向工程 静态分析 小精灵 反汇编者
2021-06-18 22:54:44

我正在编写 ELF 解析器和简单的反汇编器 x86。有这样的代码

.text:000B5A2A      call 0000B470 ;e.g. _glXSwapBuffers
...
...
got.plt:0000B470    jmp     dword ptr [ebx+240h] ;jump to .got@_glXSwapBuffers

我想知道如何在 ELF 解析时识别.got.got.plt段?简单的方法是只检查段\节名称,但这很容易被愚弄。

任何人都知道在 ELF 文件格式解析期间识别.got.got.plt段\部分的正确方法是什么?

1个回答

.got.got.plt是标签的例子,它们总是描述部分而不是分段。

节和段之间存在重要的概念差异。节提供有关如何在二进制文件中组织信息的信息,段向程序加载器(如果二进制文件是动态链接的,则动态链接器)描述应如何从二进制文件在虚拟内存中组合进程映像。查看 SysV ABI(通用)和 的输出,readelf -SW -l <binary>以了解有关部分和段之间差异的更多信息。

有关节的信息存储在节头表中,因此要在二进制文件中查找有关节的信息,请解析节头表。请注意,二进制文件中不需要存在节头表 - 加载程序仅使用段信息来完成进程创建。

通过探索这个优秀的图表来熟悉 ELF 结构:https : //github.com/corkami/pics/blob/master/binary/elf101/elf101-64.pdf

有关节头表的更多信息,请参阅反汇编程序解析 (ELF) 节名称