我想写一个小函数的示踪器。我使用ptrace。如何找到共享库符号的绝对地址?
当我看到一个CALL指令时,我想显示相当于地址调用的函数名称。
我的跟踪器使用带绝对地址的符号(符号在主二进制中定义)。 但我不知道如何获得共享库函数的虚拟内存中的绝对地址。例如,检测对libc函数的调用。
我注意到共享库中函数的地址是相对于文件的。
以下公式是否好?
Absolute address of symbol = address of the shared library in virtual memory +
relative address of the symbol.
如何从共享库中获取符号的绝对地址?
我认为这个答案是操作系统特定的 – 2010-02-09 00:07:34
是的,对于使用ELF可执行二进制格式的操作系统。比如Linux和一些* BSD(我相信NetBSD)。 – mctylr 2010-02-26 21:56:12