我有两个程序:A.exe 和 B.exe。 可能是 B.exe 调用系统函数(例如 void foo() )。
在 A.exe 程序的代码中,我创建了 B.exe 程序的进程并等待它完成。 如果它调用 foo() 函数,我希望 FORCE B.exe 终止。
我知道可以使用 GLOBAL 钩子(Hook)来实现,但还不清楚。 GLOBAL hooks 会影响其他工作进程并使它们不稳定(例如,Skype 检查系统功能是否未更改,如果不正确则崩溃)。
我还想在启动 B.exe 之前设置 Hook 。否则将会有松散/非缓存的 foo() 调用。
最佳答案
您不能使用 Hook 来阻止 API 调用。您可以注入(inject) DLL,然后继续手动 Hook API 调用,通常是通过修改导入 stub 。更好的解决方案是使用调试 API、CreateProcess 和 DEBUG_PROCESS,然后是 WaitForDebugEvent/ContinueDebugEvent 循环。
http://www.codeproject.com/KB/system/writing_debugger_1.aspx很好地涵盖了 Windows 调试器。
关于c++ - 如何在启动前为特定应用程序设置 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065603/