gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:28:23 25 4
gpt4 key购买 nike

我想使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com