C ++函数钩子

时间:2011-07-10 09:24:39

标签: c++ windows dll assembly hook

我有DLL的源代码。编译的DLL由应用程序加载。该应用程序也加载了其他几个DLL。我从应用程序和所有DLL中反汇编了asm代码,但我只有一个DLL的源代码。应用程序和所有DLL都是一个过程。

我想在DLL中编写一个函数钩子,我有源代码。我想挂钩其他DLL的函数。钩子函数应该由所有其他DLL和应用程序以及我编译的DLL调用(不应该调用原始函数)。

问题是,我不能直接挂钩一个DLL,因为它不是一个自己的进程。不知何故,我必须挂钩DLL,它们被加载到应用程序。怎么做?

作为参考,我无法使用一个DLL的偏移量挂钩函数,因为该函数位于应用程序的内存中,而不是DLL进程本身的内存中!

1 个答案:

答案 0 :(得分:0)

  

供参考,我无法挂钩   函数与一个DLL的偏移量,   因为功能在里面   应用程序的内存而不是   DLL进程本身的记忆!

当进程加载DLL时,它会被加载到该进程的地址空间中。 DLL没有自己的进程。如果要将函数挂钩在远程进程中运行的DLL中,则可以自己的DLL注入到远程进程中。现在,您注入的DLL共享目标进程的地址空间和目标DLL。在您自己的DLL代码中,您可以调用API(如GetModuleHandle)来获取目标DLL的基地址,并处理DLL中的所有挂钩代码,因为您的代码不在“您的”应用程序中运行,而是在他们好像是自己装的。