2012-11-09 52 views
0

我想使用Deviare V2 API拦截来自测试应用程序的winapi调用。问题是钩子和系统调用处于相同的过程中,因此调用不会被拦截。Deviarev2钩API:挂钩到现有的进程winapi调用?

如果我为他们每个人打开单独的进程,那么拦截将起作用。其他人有没有这种情况/问题?

事情是我试图添加一些单元测试代码的和平,而不是修改现有的生产代码来包装/模拟所有系统调用我想我可以简单地拦截所有这些调用,并假装他们,因为我希望。

回答

2

实际上,在您自己的进程中挂接API实际上要容易得多(实际上,当您想挂钩另一个进程时,无论如何您都需要DLL注入该进程,所以基本上当您挂钩自己的进程时,那一步)。这可能是您使用的库的错误。尝试使用Microsoft Detours,或者如果你愿意,可以自己修补内存,但实际上并不难,如果你对这个主题感兴趣,可以花几个小时工作。

你需要警惕的是,有些C++编译器在某些情况下(我认为调试版本)会使用一些跳转存根或类似的东西,这会干扰挂钩过程。在这种情况下,你必须在挂钩时多加小心 - MS Detours可能正确地做到这一点。如果影响您的成功,您可以尝试调试/发布版本。 我的意思是获得API的正确地址。如果该函数与WinAPI中的情况类似,那么如果使用LoadLibrary和GetProcAddress,则可以确保获得正确的地址。

在一个侧面说明我不认为API钩子是避免测试的嘲笑/残桩的正确方法,尽管它应该起作用。

如果您有兴趣了解更多关于如何挂钩作品,请点击此处查看我的论文:http://lkm.fri.uni-lj.si/zoranb/research/berdajs-bosnic%20SPE%202011.pdf