Win32汇编学习笔记(三)

本文介绍了一个使用汇编语言实现的简单示例,演示了如何从一个程序向另一个窗口程序发送消息。通过创建发送者和接收者两个程序,展示如何利用Windows API函数如FindWindow、SendMessage等来查找目标窗口并发送文本消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

None.gif;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
Sender.asm
None.gif;
从一个程序向另一个窗口程序发送消息之发送程序
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
.386
None.gif.modelflat,stdcall
None.gifoption
casemap:none
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
Include文件定义
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
includewindows.inc
None.gifincludeuser32.
inc
None.gifincludelibuser32.lib
None.gifincludekernel32.
inc
None.gifincludelibkernel32.lib
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
数据段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
.data
None.gifhWnddd?
None.gifszBufferdb
256dup(?)
None.gif
None.gif.const
None.gifszCaptiondb
'SendMessage',0
None.gifszStartdb
'PressOKtostartSendMessage,param:%08x!',0
None.gifszReturndb
'SendMessagereturned!',0
None.gifszDestClassdb
'MyClass',0;目标窗口的窗口类
None.gif
szTextdb'Textsendtootherwindows',0
None.gifszNotFounddb
'ReceiveMessageWindownotfound!',0
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
代码段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
.code
None.gif
start:
None.gifinvokeFindWindow,addrszDestClass,NULL
None.gif.ifeax
None.gif
movhWnd,eax;找到目标窗口则发送消息
None.gif
invokewsprintf,addrszBuffer,addrszStart,addrszText
None.gifinvokeMessageBox,NULL,offsetszBuffer,offsetszCaption,MB_OK
None.gifinvokeSendMessage,hWnd,WM_SETTEXT,
0,addrszText
None.gifinvokeMessageBox,NULL,offsetszReturn,offsetszCaption,MB_OK
None.gif.else
None.gifinvokeMessageBox,NULL,offsetszNotFound,offsetszCaption,MB_OK
None.gif.endif
None.gifinvokeExitProcess,NULL
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
endstart
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif

消息发送者代码:

None.gif;Receiver.asm
None.gif;
从一个程序向另一个窗口程序发送消息之消息接收程序
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif

None.gif.
386
None.gif.modelflat,stdcall
None.gifoption
casemap:none
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
Include文件定义
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
includewindows.inc
None.gifincludegdi32.
inc
None.gifincludelibgdi32.lib
None.gifincludeuser32.
inc
None.gifincludelibuser32.lib
None.gifincludekernel32.
inc
None.gifincludelibkernel32.lib
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
数据段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
.data?
None.gif
None.gifhInstancedd?
None.gifhWinMaindd?
None.gifszBufferdb
512dup(?)
None.gif
None.gif.const
None.gifszClassNamedb
'MyClass',0
None.gifszCaptionMaindb
'ReceiveMessage',0
None.gif
None.gifszReceivedb
'ReceiveWM_SETTEXTmessage',0dh,0ah
None.gifdb
'param:%08x',0dh,0ah
None.gifdb
'text:"%s"',0dh,0ah,0
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
代码段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
.code
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
窗口过程
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
_ProcWinMainprocusesebxediesi,hWnd,uMsg,wParam,lParam
None.gif
None.gif
moveax,uMsg
None.gif
;****************************************************************
None.gif
.ifeax==WM_CLOSE
None.gifinvokeDestroyWindow,hWinMain
None.gifinvokePostQuitMessage,NULL
None.gif
;****************************************************************
None.gif;
收到WM_SETTEXT消息则将消息字符串和字符串地址显示出来
None.gif;
****************************************************************
None.gif
.elseifeax==WM_SETTEXT
None.gifinvokewsprintf,addrszBuffer,addrszReceive,/
None.giflParam,lParam
None.gifinvokeMessageBox,hWnd,offsetszBuffer,addrszCaptionMain,MB_OK
None.gif
;****************************************************************
None.gif
.else
None.gifinvokeDefWindowProc,hWnd,uMsg,wParam,lParam
None.gif
ret
None.gif.endif
None.gif
;****************************************************************
None.gif
xoreax,eax
None.gif
ret
None.gif
None.gif_ProcWinMainendp
None.gif
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
_WinMainproc
None.giflocal
@stWndClass:WNDCLASSEX
None.giflocal
@stMsg:MSG
None.gif
None.gifinvokeGetModuleHandle,NULL
None.gif
movhInstance,eax
None.gifinvokeRtlZeroMemory,addr@stWndClass,sizeof@stWndClass
None.gif
;****************************************************************
None.gif;
注册窗口类
None.gif;
****************************************************************
None.gif
invokeLoadCursor,0,IDC_ARROW
None.gif
mov@stWndClass.hCursor,eax
None.gif
pushhInstance
None.gif
pop@stWndClass.hInstance
None.gif
mov@stWndClass.cbSize,sizeofWNDCLASSEX
None.gif
mov@stWndClass.style,CS_HREDRAWorCS_VREDRAW
None.gif
mov@stWndClass.lpfnWndProc,offset_ProcWinMain
None.gif
mov@stWndClass.hbrBackground,COLOR_WINDOW+1
None.gif
mov@stWndClass.lpszClassName,offsetszClassName
None.gifinvokeRegisterClassEx,addr@stWndClass
None.gif
;****************************************************************
None.gif;
建立并显示窗口
None.gif;
****************************************************************
None.gif
invokeCreateWindowEx,WS_EX_CLIENTEDGE,offsetszClassName,offsetszCaptionMain,/
None.gifWS_OVERLAPPEDWINDOW,/
None.gif
50,50,200,150,/
None.gifNULL,NULL,hInstance,NULL
None.gif
movhWinMain,eax
None.gifinvokeShowWindow,hWinMain,SW_SHOWNORMAL
None.gifinvokeUpdateWindow,hWinMain
None.gif
;****************************************************************
None.gif;
消息循环
None.gif;
****************************************************************
None.gif
.whileTRUE
None.gifinvokeGetMessage,addr@stMsg,NULL,
0,0
None.gif.break.ifeax==
0
None.gifinvokeTranslateMessage,addr@stMsg
None.gifinvokeDispatchMessage,addr@stMsg
None.gif.endw
None.gif
ret
None.gif_WinMainendp
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
start:
None.gif
call_WinMain
None.gifinvokeExitProcess,NULL
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
endstart
None.gif


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

MakeFile文件:

None.gifLINK_FLAG=/subsystem:windows
None.gifML_FLAG
=/c/coff
None.gifall:Sender
.exeReceiver.exe
None.gifSender
.exe:Sender.obj
None.gifLink
$(LINK_FLAG)Sender.obj
None.gifReceiver
.exe:Receiver.obj
None.gifLink
$(LINK_FLAG)Receiver.obj
None.gif
.asm.obj:
None.gifml
$(ML_FLAG)$<
None.gifclean:
None.gif
del*.obj
None.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值