gpt4 book ai didi

linux - 查找 PLT stub 的地址

转载 作者:太空狗 更新时间:2023-10-29 11:12:23 28 4
gpt4 key购买 nike

我在 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 条目符号和地址的。

最佳答案

我想通了:您必须解析 rela.plt 部分中的重定位表。这些条目包含一个字符串表索引,可用于通过索引到动态符号部分来查找函数名称。动态符号部分中的每个条目都包含一个动态字符串表偏移量,可用于提取函数名称。当您找到相应的函数时,重定位表 (+1) 中的索引对应于函数 PLT 条目的 .plt 部分中的索引。因此,要计算特定条目的地址,只需:.plt.sec 地址 + ((relocation_index + 1) * .plt 条目大小)

此方法适用于 x86。它不适用于 .plt 部分具有完全不同格式的 PPC。如果有人有关于为 PPC 执行此操作的任何信息,请发布。

关于linux - 查找 PLT stub 的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com