gpt4 book ai didi

linux - 与位置无关的可执行文件和 ptrace

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:10 26 4
gpt4 key购买 nike

我想在 Linux 上跟踪 PIE,例如在给定的指令地址中断。从反汇编中,我得到了指令的相对地址 - 如何找出可执行文件的加载位置,以便获得绝对地址?

GDB 能够跟踪 PIE - 它是如何处理的?

最佳答案

how does it deal with this?

在 Linux 上,动态加载器 ld-linux... 有一个特殊的函数:_dl_debug_state(),加载器在加载共享库之前和之后调用它,并且在设置全局变量之后:_r_debug.r_stateRT_ADDRT_CONSISTENT

调试器可以在该函数上设置断点,检查 .r_state_r_debug.r_map,并在此过程中发现在哪个地址加载了哪些 ELF 二进制文件。

此机制用于发现位置,例如libc.so.6 早在 PIE 二进制文件受支持之前就已加载。 PIE 二进制文件只是共享库的一个特例,因此完全相同的机制也适用于它。

这引出了一个问题:GDB 如何发现 ld-linux 本身被加载的位置(因此可以在 _dl_debug_state() 上设置断点)。内核通过辅助向量 AT_BASE 条目告诉它。有关辅助矢量的更多信息 here .

关于linux - 与位置无关的可执行文件和 ptrace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47498350/

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