cod*_*key 7 linux x86-64 elf plt got
我正在 Linux X86_64 上工作。
我需要根据条目所代表的动态函数的名称来确定 ELF 文件中特定 PLT 条目的地址。我可以算出文件相对于地址的偏移量,但我需要能够确定地址。
如果我使用反汇编 ELF 文件,objdump -D -z elffile
我会发现 objdump 对 PLT 中的每个条目使用符号名称。(objdump从哪里获取这些地址和符号名的关系?)
例子:
0000000000000041a2b0 fileno@plt:
Run Code Online (Sandbox Code Playgroud)
如果我使用objdump -T elffile | grep fileno
我会得到这样的东西:
0000000000000 DF *UND* 00000000000000000 GLIBC_2.2.5 fileno
Run Code Online (Sandbox Code Playgroud)
我需要从“C”做的是在 ELF 文件中找到特定动态函数的 PLT 条目并获取地址。
背景是我正在修补现有的 ELF 文件,并且需要将函数调用重定向到不同的动态函数。我已经使用从 objdump 反汇编中收集的地址手动修补了 ELF 文件,并证明这适用于我的特定应用程序,我只需要能够从程序中执行此操作。我希望不必通过 objdump 反汇编程序代码来找出它如何获取 PLT 条目符号和地址。
我发现了这一点:您必须解析 rela.plt 部分中的重定位表。这些条目包含一个字符串表索引,可用于通过索引到动态符号部分来查找函数名称。动态符号部分中的每个条目都包含一个动态字符串表偏移量,可用于提取函数名称。当您找到相应的函数时,重定位表中的索引 (+1) 对应于函数 PLT 条目的 .plt 部分中的索引。因此,要计算特定条目的地址,只需: .plt.sec 地址 + ((relocation_index + 1) * .plt 条目大小)
此方法适用于 x86。它不适用于 PPC,因为 .plt 部分的格式完全不同。如果有人有任何有关 PPC 执行此操作的信息,请发布。
归档时间: |
|
查看次数: |
2771 次 |
最近记录: |