问题:
我正在注入程序并修补调用,但我想知道是否有任何方法可以逐行遍历应用程序并找到特定调用。_IE:假设程序'Foo.exe'在内存中的某个位置调用了MessageBox。
如果我执行以下代码:(只是一个粗略的想法)
a = GetModuleHandle ( "<dll>" );
b = GetProcAddress ( a , "<name>" );
swap ( b , (DWORD)*fake_function );
-- 一切正常,直到你开始调用实际的函数——这会创建一个永远持续的巨大循环(哎哟)。
现在我不确定这一点,我可能错了,但是......上面的代码是否替换了内存中的“Foo.exe”调用,还是用“fake_function”替换了 dll 的函数?
我对一些事情感兴趣...
A )我怎样才能在 'Foo,exe' 中找到所有调用MessageBox的内存位置,并用调用 'fake_function' 替换内存位置?
B) detours 是如何解决这个问题的?