【发布时间】:2017-05-03 21:54:11
【问题描述】:
我正在使用 Linux X86_64。
在给定条目所代表的动态函数的名称的情况下,我需要确定 ELF 文件中特定 PLT 条目的地址。 我可以从地址中找出文件偏移量,但我需要能够确定地址。
如果我使用 objdump -D -z elffile 反汇编 ELF 文件,我看到 objdump 为 PLT 中的每个条目使用符号名称。 (objdump从哪里获取这些地址和符号名的关系?)
示例:
0000000000000041a2b0 fileno@plt:
如果我使用objdump -T elffile | grep fileno,我会得到这样的结果:
0000000000000 DF *UND* 00000000000000000 GLIBC_2.2.5 fileno
我需要能够从“C”做的是在ELF文件中找到特定动态函数的PLT条目并获取地址。
背景是我正在修补现有的 ELF 文件,需要将函数调用重定向到不同的动态函数。我已经使用从 objdump 反汇编中收集的地址手动修补了 ELF 文件,并证明这将适用于我的特定应用程序,我只需要能够从程序中完成它。我希望不必爬过 objdump 反汇编代码来弄清楚它是如何获取 PLT 条目符号和地址的。
【问题讨论】:
-
有趣的是,似乎没有办法从汇编中做到这一点。直觉上
movq someFunc@PLT, %rax应该这样做,但是@PLT引用似乎暗示了链接器修改会弄乱movq,这似乎使得这些someFunc@PLT引用只能与调用指令一起使用。