这种情况经常发生,当我在反汇编器或调试器中反转程序时,我遇到了这样的事情:
push eax ; lParam
push 1 ; wParam
push 80h ; Msg
push ecx ; hWnd
call esi ; SendMessageA
为了有效地扭转这种情况,我需要知道 80h 是什么。问题是当编译(预处理)时,所有的 Windows 常量宏显然都变成了数字,所以我不再有语义含义。我也不能去搜索“SendMessage 0x80”,因为那里也没有真正的上下文。
问题是,当仅给出一个函数和这样的值时,在确定 Microsoft Windows 常量宏名称时有哪些技巧?我可以转到MSDN上的SendMessage,然后从那里查看 Msg 参数,它引导我进入系统定义的消息页。但是,与许多其他 MSDN 页面一样,该页面仅通过描述定义宏,而不提供每个值对应的表。这实际上是我在反转 Windows 应用程序时遇到的一个常见问题。我发现的另一个解决方案是尝试在线查找相应宏的 .h 文件,然后在那里搜索值。但这种情况不太理想,因为我不知道信息是否准确最新,但很多时候我甚至不知道哪个头文件将包含定义。