0

假设我们在 .so 中有一个名为“SomeFunction()”的函数。假设这个函数多次调用自身(递归)。

然后,以下代码将不起作用

main() {
     [...]
     g_backup_bytes = SetJmpHook(SomeFunction, SomeFunction_hook); // Address of func previously found using dlsym(), contained in SomeFunction
     [...]
}

void SomeFunction_hook(void)
{
     [...]
     // Do stuff here
     [...]
     // Call the real function
     UnsetJmpHook(SomeFunction, g_backup_bytes); // Restore original bytes
     SomeFunction(); // Call
     SetJmpHook(SomeFunction, SomeFunction_hook); // Restore the hook
}

我试图挂钩的函数有 void 参数,但会修改全局变量。每次调用该函数时,我绝对需要修改这些全局变量中的一些字节。现在,我的问题是......当我取消设置挂钩时,就像上面的示例一样,函数调用自身,并且这些调用不会被我的 SomeFunction_hook() 过程捕获(因为 jmp 不再存在)。这带来了一个真正的问题。

你有什么想法我可以成功地挂断每个电话吗?

谢谢!

4

0 回答 0