您的位置:首页 > 其它

SendMessage()两程序通信与MFC手动添加用户需要的新消息及其反汇编注解

2011-03-14 16:15 671 查看
1、实现SendMsg程序将输入的数据发送给ReceiveMsg程序的过程。效果见图1,源代码见http://download.csdn.net/source/3091018



图1 两个程序通信

发送方(SendMsg)主要使用::SendMessage()函数,使用该函数需要将接受函数的句柄,发送给接受程序的消息,以及发送内容的地址做为参数。关键代码如下
HWND hfwnd = ::FindWindow(NULL, "ReceiveMsg");//获取接收程序的句柄
UpdateData(TRUE);
::SendMessage(hfwnd, WM_SETTEXT, NULL, (LPARAM)m_data.GetBuffer(0));

接收方(ReceiveMsg)判断获得WM_SETTEXT消息后做出处理即可。由于MFC没有内置添加WM_SETTEXT消息的wizard,需要自己手动添加该消息,还要注意消息响应函数的形参。在对话框程序xxx中添加消息的步骤如下:
(1)在xxxDlg.h中添加消息响应函数的声明 afx_msg void OnSetText(WPARAM wParam, LPARAM lParam);
//{{AFX_MSG(CReceiveMsgDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
//............
afx_msg void OnSetText(WPARAM wParam, LPARAM lParam);

//}}AFX_MSG
DECLARE_MESSAGE_MAP()

(2)在xxxDlg.cpp的消息映射表中添加消息映射 ON_MESSAGE(WM_SETTEXT,OnSetText)
BEGIN_MESSAGE_MAP(CReceiveMsgDlg, CDialog)
//{{AFX_MSG_MAP(CReceiveMsgDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_WM_TIMER()
ON_MESSAGE(WM_SETTEXT,OnSetText)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

(3)在xxxDlg.cpp中实现消息响应函数OnSetText(WPARAM wParam, LPARAM lParam);
void xxxDlg::OnSetText(WPARAM wParam, LPARAM lParam)
{//lparam为程序发送数据的起始地址
CString str;
str.Format(_T("%s"), lParam);//将数据转换成字符串,便于显示
m_strData = str;
UpdateData(FALSE);
}

注意,WM_SETTEXT消息为系统消息,所以不需要定义。若要自己定义消息,需要#define一下,详见参考[1]
2、利用OD反汇编观察FindWindow()函数,SendMessage()函数和MessageBox()函数的实现过程,便于代码注入时使用
FindWindow:
PUSH EAX;保存对话框标题名的字符串地址
PUSH 0
CALL dowrd ptr [4021E0];调用FindWindow函数,不同程序中地址不同

SendMessage:
PUSH EAX;发送数据所在地址
PUSH 0
PUSH 0C;发送WM_SETTEXT消息
PUSH EDI;hwmd
CALL  dowrd ptr [4021EC];调用SendMessage函数,不同程序中地址不同

AfxMessageBox:
PUSH 0  ;消息框风格MB_OK|MB_ICONXCLAMAION|MB_APPLMODAL
PUSH EAX;消息框title字符串地址
PUSH EBX;消息框中显示字符串的地址
CALL dowrd ptr [4021EC];调用AfxMessageBox函数,不同程序中地址不同

注意,调用函数时具体地址会不同,可以用IDA来查看,或直接写OD能识别的函数名(eg: MessageBoxA),可以先写一个小程序反汇编看看OD本身能识别的函数名是什么样的.......
参考
[1] http://blog.csdn.net/machaoboy/archive/2009/01/04/3706991.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: