我目前正在研究一个项目,它涉及用另一个函数代替。假设我有一个想要钩住的简单函数:
int bad_func(int a, int b) {
return a * b;
}
我想用以下方法替换它:
int good_func(int a, int b) {
return a + b;
}
目前,这是我的工作方式:
ptrace
bad_func
的地址mmap2
系统调用以分配新的rwx
内存段good_func
的汇编代码复制到新分配的段中bad_func
指令替换JMP good_func
的前几个字节所有这些都很好,我可以确认子进程进入新分配的内存并执行good_func
。问题在于它永远不会返回尚未执行的其余代码。
由于这两种方法均包含以下说明,
push %ebp
mov %esp, %ebp
...
pop %ebp
ret
我想我不需要保存/更改ebp
和esp
寄存器来使它起作用,但是我想我错了...
有人知道我如何实现我的目标吗?
非常感谢您的宝贵时间。