举例来说,我们来看看一个使用消息映射的 MFC 程序。这些映射存在于程序的常量数据区中,最初由 IDA 表示为数字和偏移量的混合体:
要理解它,我们可以参考 afxwin.h 中定义的 AFX_MSGMAP_ENTRY 结构:
struct AFX_MSGMAP_ENTRY
{
UINT nMessage; // windows message
UINT nCode; // control code or WM_NOTIFY code
UINT nID; // control ID (or 0 for windows messages)
UINT nLastID; // used for entries specifying a range of control id's
UINT_PTR nSig; // signature type (action) or pointer to message #
AFX_PMSG pfn; // routine to call (or special value)
};