递归函数 - 挂钩

时间:2013-04-20 18:00:36

标签: c linux hook

假设我们在.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不再存在)。这是一个真正的问题。

你有什么想法我怎么能成功地勾住每个电话?

谢谢!

0 个答案:

没有答案