我想从 ld-2.13.so 调用 _dl_open 函数。我从 objdump 获取此函数的偏移量,然后将其添加到库起始地址以获得函数地址。然后我通过 ptrace 附加到进程并注入(inject)我自己的二进制代码,其中:
- 我将库路径的地址放入 eax 寄存器。
- 我投入 ebx RLTD_LAZY
- 我在 ecx 中输入了 NULL(它是一个调用者,但我不明白它到底是什么)。
然后我调用该函数(正确计算了哪个地址),但我什么也没得到 :) 库未注入(inject),我没有输出。我在 ld-2.13.so 中也找到了 _dl_open_worker 函数,当我调用它时,我得到:
./process:加载共享库时出错:dlopen:调用者无效
我做错了什么?
我所做的一切都是基于:http://nologin.org/Downloads/Papers/remote-library-injection.pdf
在此先感谢您的帮助。
最佳答案
Linux 使用地址空间布局随机化 (ASLR) 来阻止远程缓冲区溢出攻击,这些攻击正是您所说的。
当提出这样的问题时,我强烈建议您描述您对这些信息的合法需求。因此,用户不会为明显的非法事件提供太多帮助。
关于c - 调用 ld-2.13.so 中的 _dl_open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5502829/