假设我们在.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不再存在)。这是一个真正的问题。
你有什么想法我怎么能成功地勾住每个电话?
谢谢!