GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW") returns ntdll 中的地址

GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW") returns address in ntdll

我正在使用 Windows 7 Professional x64。

我需要挂接 DefWindowProcW 程序。但是当我试图通过 GetProcAddress() 获取它的地址时,它是 NtdllDefWindowProcW() 的 returns 地址,它位于 ntdll.dll。在 NtdllDefWindowProcW().

的开头有跳转到真正的 user32 函数 DefWindowProcW()

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

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

中名为 "NtdllDefWindowProc_W" 的函数

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

返回的地址
GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW")