如何找到共享库的符号的绝对地址?

La *_*lle 5 c symbols shared-libraries elf

我想写一个小函数的跟踪器.我用ptrace.

当我看到CALL指令时,我想显示相当于地址调用的函数名称.

我的跟踪器使用带有绝对地址的符号(符号在主二进制文件中定义).但我不知道如何在虚拟内存中获取共享库函数的绝对地址.例如,检测对libc函数的调用.

我注意到共享库中函数的地址是相对于文件的.

以下等式是否良好?

Absolute address of symbol = address of the shared library in virtual memory +
                             relative address of the symbol.
Run Code Online (Sandbox Code Playgroud)

如何从共享库中获取符号的绝对地址?

avp*_*avp 0

一旦您没有描述您所使用的系统,本文就会澄清,至少所描述的任务可以在某些情况下得到解决,而不是在所有情况下都可以解决。
如果我处于您的情况,我会在内存和库中搜索相应的二进制片段。然后,一旦内存和库对齐,问题就解决了。所以是的,只要库不能拆分并作为独立部分加载,这个方程就很好。