我正在使用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文件,并需要将函数调用重定向到另一个动态函数。我已经手动修补了一个ELF文件,使用objdump反汇编所收集的地址证明这对于我的特定应用程序有效,我只需要能够从程序中做到这一点。我希望不必爬行 objdump 反汇编器代码来弄清楚它如何获取 PLT 条目符号和地址。
movq someFunc@PLT,%rax
应该可以实现,但@PLT
引用似乎意味着链接器修改会破坏movq
,这似乎使得这些someFunc@PLT
引用仅可用于 call 指令。 - Petr Skocik