我有所有符号的偏移地址(通过libelf在自己的二进制文件上执行.so获得)。现在,在运行时,我需要计算所有这些符号的absolutue地址,为此我需要获取基址(加载共享库的地方)并进行计算:
symbol_address = base_address + symbol_offset
共享库如何获得自己的基地址?在Windows上我会使用传递给DllMain的参数,在linux中有一些等价的吗?
答案 0 :(得分:4)
答案 1 :(得分:-1)
经过一番研究后,我设法找到了通过其描述符发现库加载地址的方法,该描述符由dlopen()函数返回。它是在这样的宏的帮助下完成的:
#define LIBRARY_ADDRESS_BY_HANDLE(dlhandle) ((NULL == dlhandle) ? NULL : (void*)*(size_t const*)(dlhandle))