Sas*_*lic 3 gcc symbols shared-libraries elf dynamic-linking
我有所有符号的偏移地址(通过 libelf 在其自己的二进制文件 .so 上执行获得)。现在,在运行时,我需要计算所有这些符号的绝对地址,为此我需要获取基地址(加载共享库的位置)并进行计算:
symbol_address = base_address + symbol_offset
共享库如何获得自己的基地址?在 Windows 上,我会使用传递给 DllMain 的参数,在 linux 中是否有一些等价物?
在 Linuxdladdr()上,任何符号 fromlibfoo.so都会给你
void *dli_fbase; /* Load address of that object */
Run Code Online (Sandbox Code Playgroud)
更多信息在这里。
或者,dl_iterate_phdr 可以为您提供加载到当前进程中的每个 ELF 图像的加载地址。
两者都是GLIBC扩展。如果您没有使用GLIBC,请务必说明您使用的是什么,以便可以给出更合适的答案。
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |