ptrace x86功能蹦床

时间:2018-06-26 13:16:28

标签: x86 hook

我目前正在研究一个项目,它涉及用另一个函数代替。假设我有一个想要钩住的简单函数:

int bad_func(int a, int b) {
    return a * b;
}

我想用以下方法替换它:

int good_func(int a, int b) {
    return a + b;
}

目前,这是我的工作方式:

  1. 使用ptrace
  2. 进入流程
  3. 获取代码段中bad_func的地址
  4. 注入mmap2系统调用以分配新的rwx内存段
  5. good_func的汇编代码复制到新分配的段中
  6. bad_func指令替换JMP good_func的前几个字节

所有这些都很好,我可以确认子进程进入新分配的内存并执行good_func。问题在于它永远不会返回尚未执行的其余代码。

由于这两种方法均包含以下说明,

push %ebp
mov  %esp, %ebp
...
pop  %ebp
ret

我想我不需要保存/更改ebpesp寄存器来使它起作用,但是我想我错了...

有人知道我如何实现我的目标吗?

非常感谢您的宝贵时间。

0 个答案:

没有答案