【发布时间】:2011-07-10 09:24:39
【问题描述】:
我有一个 DLL 的源代码。编译后的 DLL 由应用程序加载。该应用程序还加载了其他几个 DLL。我已经从应用程序和所有 DLL 中反汇编了 asm 代码,但我只有一个 DLL 的源代码。应用程序和所有 DLL 是一个进程。
我想在我有源代码的 DLL 中编写一个函数挂钩。我想从其他 DLL 中挂钩函数。钩子函数应该被所有其他 DLL 和应用程序以及我编译的 DLL 调用(不应调用原始函数)。
问题是,我不能直接挂钩一个 DLL,因为它不是一个自己的进程。不知何故,我必须挂钩加载到应用程序的 DLL。怎么做?
作为参考,我不能用一个 DLL 的偏移量挂钩一个函数,因为该函数在应用程序的内存中,而不是在 DLL 进程本身的内存中!
【问题讨论】:
-
您能否给出一个想要这样做的正当理由,函数挂钩往往意味着您想要进行某种黑客攻击:\
-
天哪,微软为什么要提供类似弯路的东西?附加 API 以获得更多可能性。我是服务器的管理员,我被黑了。我必须更好地处理传入的连接包。
-
在 Windows 上进行黑客攻击是有原因的,它为您提供了所需的所有功能:P WinHook API 是您可能想要阅读的内容,但我希望您正在做一些合法的事情.
-
我知道所有这些东西。我只需要知道我的问题的答案:/
-
SetWindowsHook 返回一个 HHOOK,使用句柄来获取正在运行该库的进程的句柄。
标签: c++ windows dll assembly hook