gpt4 book ai didi

linux - 解析共享库中的符号名称 (Linux)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:27 25 4
gpt4 key购买 nike

我正在 Linux 中进行动态二进制分析。鉴于程序是动态链接的(加载时链接)并且没有地址空间随机化,如果调用标准库函数,我必须解析函数名称。我在反汇编代码中看到,调用标准库例程首先分支到 .plt 部分中的某个地址,PC 正在加载那里计算的内存地址。顺便说一句,它在 ARM Linux 中,但我想总体思路是一样的。

我是系统编程的新手。我不太了解库是如何链接的,地址是如何在运行时解析的。专家的任何想法表示赞赏。

最佳答案

PLT 代表过程链接表,该表将共享库中的函数(和全局变量)解析为程序中的地址。

PLT 与 GOT(全局偏移表)密切相关。如果调用共享库中的地址,它们一起执行惰性绑定(bind):在第一次调用时,函数的实际地址被解析(即使没有地址随机化,它也可能与每次执行不同,这取决于按照加载/使用库的顺序),在进一步的调用中,该地址将间接与 GOT 一起使用。

您可以使用objdumpreadelf 等工具来检查elf 文件的内容。这里有一些更详细的解释:

http://www.technovelty.org/linux/pltgot.html

http://timetobleed.com/dynamic-linking-elf-vs-mach-o/

关于linux - 解析共享库中的符号名称 (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399411/

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