c - 调用 ld-2.13.so 中的 _dl_open

标签 c linux dynamic ld

我想从 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/

相关文章:

C包含错误多重定义错误

linux - 如何将版本号作为变量传递给 rpmbuilder?

c - 来自 C 的 Linux SSH

c++ - 在 C++ 中动态增长数组

C++多维 vector

c - 为什么这样一个结构体包含两个只包含一个元素的数组字段?

c - 无法理解c链表

c - 如何检查缓冲区是否可写?

php - 是否可以动态生成 html5 缓存 list ?

linux - 如何在同一台服务器上将多个 Elasticsearch (2.2)节点作为进程运行