我使用的是Windows 7 Professional x64。
我需要挂钩DefWindowProcW程序。但是当我尝试通过GetProcAddress()
获取地址时,它会返回NtdllDefWindowProcW()
的地址,该地址位于ntdll.dll中。在user32
开头有一个跳转到真实DefWindowProcW()
函数NtdllDefWindowProcW()
。
有没有办法获得真正的程序地址而不是ntdll程序?
答案 0 :(得分:2)
这就是所谓的转发导出。该功能在早期版本的Windows中的user32中实现。但在某些时候,微软决定将其转移到ntdll。为了避免破坏应用程序,user32导出转发到ntdll中名为"NtdllDefWindowProc_W"
的函数。
ntdll中转发的地址是实际实现该功能的地方。它可能随后调用user32是一个实现细节。因此,如果你想挂钩DefWindowProcW
,你可以很好地挂钩你的呼叫返回的地址
GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW")