我有一个DLL文件 library.dll ,其中包含一个函数 foo 。函数 foo 调用WinAPI函数 foo 。我编写了一个从 library.dll 调用 foo 的应用程序。问题是我想通过我在应用程序中声明的函数 hoo 覆盖对 goo 函数的调用(不在DLL中)。
如何挂断对 goo 功能的调用?我不是在寻找一个全局钩子,我只想覆盖我写的应用程序所做的调用。
答案 0 :(得分:1)
Microsoft Research提供了名为Detours的库:http://research.microsoft.com/en-us/projects/detours/。您可以使用它在Windows中重新路由任何API调用。
它完全按照您的描述 - 而不是调用Win32 API,您的函数被调用。在该功能中,您可以自由地做您想做的事,例如您可以再次调用原始Win32函数,也可以立即返回失败代码或任何您喜欢的函数。
Detours的Express版本是免费的,但它仅限于x86架构上的非商业用途。
答案 1 :(得分:1)
在goo
的导入地址表中修补library.dll
的导入描述符。 IAT补丁是一种众所周知的挂钩技术,用于拦截两个PE模块之间的函数调用。