假设我们在 .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 不再存在)。这带来了一个真正的问题。
你有什么想法我可以成功地挂断每个电话吗?
谢谢!