c++ - Deviarev2 Hook API : Hook into existing process winapi calls?

标签 c++ winapi hook detours

我想使用 Deviare V2 API 拦截来自测试应用程序的 winapi 调用。问题是 Hook 和系统调用在同一个进程中,因此调用没有被拦截。

如果我为每个进程打开单独的进程,那么拦截就会起作用。还有其他人遇到过这种情况/问题吗?

问题是我正在尝试将一些单元测试添加到代码的和平中,而不是修改现有的生产代码来包装/模拟所有系统调用我认为我可以简单地拦截所有这些调用并按照我的意愿伪造它们。

最佳答案

在您自己的进程中挂接 API 实际上要容易得多(实际上,当您想要挂接另一个进程时,您无论如何都需要将 DLL 注入(inject)到该进程中,所以基本上当您在自己的进程中挂接时,您可以跳过它步)。这可能是您正在使用的库的错误。试试 Microsoft Detours,或者如果你能做到,自己修补内存,实际上并不难,如果你是这个主题的新手,几个小时就可以完成。

您需要注意的是,某些 C++ 编译器在某些情况下(我认为是调试版本)会使用一些跳转 stub 或类似的东西,这会干扰 Hook 过程。在那种情况下,您在 Hook 时必须格外小心 - MS Detours 可能会正确地做到这一点。如果这会影响您的成功,您可以尝试调试/发布版本。 我的意思是获取 API 的正确地址。如果函数在 DLL 中,就像 WinAPI 的情况一样,如果您使用 LoadLibrary 和 GetProcAddress,您可以确保获得正确的地址。

附带说明一下,我不认为 API Hook 是避免模拟/ stub 测试的正确方法,尽管它应该有效。

如果您对 Hook 的工作原理更感兴趣,可以在这里查看我的论文:http://lkm.fri.uni-lj.si/zoranb/research/berdajs-bosnic%20SPE%202011.pdf

关于c++ - Deviarev2 Hook API : Hook into existing process winapi calls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307351/

相关文章:

c++ - 在 C++ 的 Win32 项目中,如何可能有除 main() 以外的入口点。 (WinMain)

C++ 字符串迭代器

c++ - decltype(function) 作为类成员

winapi - 移动鼠标光标而不触发 WM_MOUSEMOVE

c++ - g++ 编译与 gsl : library not found

c++ - 更改窗口中的标签

c++ - 在 C++ 中解析 RFC3339 日期

php - CodeIgniter post_controller_constructor Hook 运行两次?

c++ - 在父进程中挂接 api 调用

c - 当我运行使用 Windows api 编写的代码时,它一打开就会关闭(在 Visual Studio 中)