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

C 如何找到共享库符号的绝对地址?,c,shared-libraries,symbols,elf,C,Shared Libraries,Symbols,Elf,我想写一个小函数的跟踪程序。我使用ptrace 当我看到调用指令时,我想显示与地址调用等效的函数名 我的跟踪器使用带有绝对地址的符号(符号在主二进制文件中定义)。 但我不知道如何在虚拟内存中获得共享库函数的绝对地址。例如,检测对libc函数的调用 我注意到共享库中函数的地址是相对于文件的 下面的等式好吗 Absolute address of symbol = address of the shared library in virtual memory +

我想写一个小函数的跟踪程序。我使用ptrace

当我看到调用指令时,我想显示与地址调用等效的函数名

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

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

下面的等式好吗

Absolute address of symbol = address of the shared library in virtual memory +
                             relative address of the symbol.

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

只要您没有描述您所使用的系统,就说明至少所描述的任务在某些情况下可以解决,而不是在所有情况下。

如果我是你的情况,我会在内存和库中搜索相应的二进制片段。然后,只要内存和库对齐,问题就解决了。因此,是的,只要库不能作为独立的部分拆分和加载,这个等式就很好。

我想您应该了解动态链接是如何工作的,特别是全局偏移表。这算是一个开始,但要让它在整个系统中可靠地工作可能很棘手。

这本书包含了这些问题的答案以及背景说明。也许值得一读。适用于ELF的内容并不适用于Windows,但本书同时涵盖了这两种系统以及其他一些系统。

我认为答案是操作系统特定性是的,适用于使用ELF可执行二进制格式的操作系统。比如Linux和一些BSD(我相信是NetBSD)。