gpt4 book ai didi

backtrace - Dwarf 偏移量和共享对象与可执行文件

转载 作者:行者123 更新时间:2023-12-02 22:55:17 28 4
gpt4 key购买 nike

好的,我已经使用 Linux Dwarf ldw 库将 backtrace_symbols 输出转换为源代码和行号,但遇到了障碍。 backtrace_symbols 给出内存中的偏移量,在用作 Dwarf 的输入之前,我从中减去基地址(使用 dladdr() 获得)。但似乎对于父可执行文件,我不应该减去基地址,因为 Dwarf 偏移量似乎包含它。

那么我如何在代码中区分 EXE 和 SO(我希望有比“查找结尾 .so”更好的东西),或者是否有一个我可以调用的不同函数来获取基地址或零对于父 EXE?

最佳答案

是的,你说得对。如果可执行文件是 ET_EXEC(不是 DT_DYN,即它不是位置无关的可执行文件),则 DWARF 中的虚拟地址是程序中的真实虚拟地址图像。对于DT_DYN,DWARF 中的地址是相对于模块基址的偏移量。

这在 7.3 中有解释。 DWARF 规范:

The relocated addresses in the debugging informations for an executable object are virtual addresses and the relocated addresses in the debugging informations for a shared object are offsets relative to the start of the lowest region of memory loaded from that shared memory.

您应该在 ELF header 中使用 e_type 来区分它们。

关于backtrace - Dwarf 偏移量和共享对象与可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38336431/

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