0

我正在使用 Windows 7 Professional x64。

我需要挂钩 DefWindowProcW 程序。但是当我尝试通过 获取它的地址时GetProcAddress(),它返回NtdllDefWindowProcW()位于 ntdll.dll 中的地址。开头有一个真正的user32函数跳转。DefWindowProcW()NtdllDefWindowProcW()

有没有办法获得真正的程序地址而不是 ntdll 程序?

4

1 回答 1

2

这就是所谓的转发导出。该功能是在早期版本的 Windows 中的 user32 中实现的。但在某个时候,微软决定将其移入 ntdll。为了避免破坏应用程序,user32 导出转发到"NtdllDefWindowProc_W"ntdll 中命名的函数。

ntdll中的转发地址是函数实际实现的地方。它可能随后调用 user32 是一个实现细节。所以,如果你想钩住DefWindowProcW,你可以很好地钩住你调用返回的地址

GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW")
于 2015-06-16T15:18:57.573 回答