共享库如何获得自己的基地址

时间:2010-07-21 13:11:57

标签: gcc shared-libraries symbols elf dynamic-linking

我有所有符号的偏移地址(通过libelf在自己的二进制文件上执行.so获得)。现在,在运行时,我需要计算所有这些符号的absolutue地址,为此我需要获取基址(加载共享库的地方)并进行计算:

symbol_address = base_address + symbol_offset

共享库如何获得自己的基地址?在Windows上我会使用传递给DllMain的参数,在linux中有一些等价的吗?

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:-1)

经过一番研究后,我设法找到了通过其描述符发现库加载地址的方法,该描述符由dlopen()函数返回。它是在这样的宏的帮助下完成的:

#define  LIBRARY_ADDRESS_BY_HANDLE(dlhandle) ((NULL == dlhandle) ? NULL :  (void*)*(size_t const*)(dlhandle))