【发布时间】:2011-03-18 23:49:49
【问题描述】:
我有所有符号的偏移地址(通过 libelf 在其自己的二进制 .so 上执行获得)。现在,在运行时,我需要计算所有这些符号的绝对地址,为此我需要获取基地址(加载共享库的位置)并进行计算:
symbol_address = base_address + symbol_offset
共享库如何获得自己的基地址?在 Windows 上我会使用传递给 DllMain 的参数,在 linux 中是否有一些等价物?
【问题讨论】:
-
您想要一个库函数来计算同一个库中对象的地址吗?您是否有理由不能像分配指针那样获取对象的地址?
-
我需要迭代二进制文件中的所有符号并获取它们的绝对地址以进行进一步计算,因此对于较大的二进制文件几乎不可能手动访问每个对象(更不用说来自 crt 的符号了)。所以现在我可以使用 libelf 获取所有符号的偏移量,只需要这个基地址来计算虚拟地址。
标签: gcc shared-libraries symbols elf dynamic-linking