c++ - 如何在启动前为特定应用程序设置 Hook

标签 c++ c winapi hook

我有两个程序: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/

相关文章:

c - 使用 fseek 和 fread

C unsigned char 溢出时的意外行为

c++ - 关于从设备向主机复制数据时的推力::execution_policy

c++ - 通过属性值从 vector 中删除对象的 unique_ptr

c++ - 我的 2D 迷宫解算器无限递归并且出现堆栈溢出 - 为什么?

c - 我得到了意外的输出

winapi - 我可以从 WinApi 应用程序创建/更新 Windows 8 开始菜单图 block 吗?

c++ - 每 X 字节删除空字节 c++ WINAPI

c++ - 如何将文件的路径(或任何文本)显示/附加到编辑框中? (C++ Win32 API)

c++ - Windows C++ : How can I redirect stderr for calls to fprintf?