Win32汇编学习笔记(三)

None.gif ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 Sender.asm
None.gif;
 从一个程序向另一个窗口程序发送消息 之 发送程序
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        . 386
None.gif        .model flat,stdcall
None.gif        option 
casemap: none
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 Include 文件定义
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
include        windows. inc
None.gifinclude        user32.
inc
None.gifincludelib    user32.lib
None.gifinclude        kernel32.
inc
None.gifincludelib    kernel32.lib
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 数据段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .data
None.gifhWnd        dd    ?
None.gifszBuffer    db    
256  dup (?)
None.gif
None.gif        .const
None.gifszCaption    db    
' SendMessage ' , 0
None.gifszStart        db    
' Press OK to start SendMessage, param: %08x! ' , 0
None.gifszReturn    db    
' SendMessage returned! ' , 0
None.gifszDestClass    db    
' MyClass ' , 0      ; 目标窗口的窗口类
None.gif
szText        db     ' Text send to other windows ' , 0
None.gifszNotFound    db    
' Receive Message Window not found! ' , 0
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 代码段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .code
None.gif
start:
None.gif        invoke    FindWindow,addr szDestClass,NULL
None.gif        .if    eax
None.gif            
mov     hWnd,eax     ; 找到目标窗口则发送消息
None.gif
            invoke    wsprintf,addr szBuffer,addr szStart,addr szText
None.gif            invoke    MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
None.gif            invoke    SendMessage,hWnd,WM_SETTEXT,
0 ,addr szText
None.gif            invoke    MessageBox,NULL,offset szReturn,offset szCaption,MB_OK
None.gif        .else
None.gif            invoke    MessageBox,NULL,offset szNotFound,offset szCaption,MB_OK
None.gif        .endif
None.gif        invoke    ExitProcess,NULL
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        end    start
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif

消息发送者代码:

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

None.gif        .
386
None.gif        .model flat,stdcall
None.gif        option 
casemap: none
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 Include 文件定义
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
include        windows. inc
None.gifinclude        gdi32.
inc
None.gifincludelib    gdi32.lib
None.gifinclude        user32.
inc
None.gifincludelib    user32.lib
None.gifinclude        kernel32.
inc
None.gifincludelib    kernel32.lib
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 数据段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .data?
None.gif
None.gifhInstance    dd    ?
None.gifhWinMain    dd    ?
None.gifszBuffer    db    
512  dup (?)
None.gif
None.gif        .const
None.gifszClassName    db    
' MyClass ' , 0
None.gifszCaptionMain    db    
' Receive Message ' , 0
None.gif
None.gifszReceive    db    
' Receive WM_SETTEXT message ' ,0dh,0ah
None.gif        db    
' param: %08x ' ,0dh,0ah
None.gif        db    
' text: "%s" ' ,0dh,0ah, 0
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 代码段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .code
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 窗口过程
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
_ProcWinMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,lParam
None.gif
None.gif        
mov     eax,uMsg
None.gif
; ****************************************************************
None.gif
        .if    eax ==    WM_CLOSE
None.gif            invoke    DestroyWindow,hWinMain
None.gif            invoke    PostQuitMessage,NULL
None.gif
; ****************************************************************
None.gif;
 收到 WM_SETTEXT 消息则将消息字符串和字符串地址显示出来
None.gif;
****************************************************************
None.gif
        .elseif    eax ==    WM_SETTEXT
None.gif            invoke    wsprintf,addr szBuffer,addr szReceive,\
None.gif                lParam,lParam
None.gif            invoke    MessageBox,hWnd,offset szBuffer,addr szCaptionMain,MB_OK
None.gif
; ****************************************************************
None.gif
        .else
None.gif            invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
None.gif            
ret
None.gif        .endif
None.gif
; ****************************************************************
None.gif
         xor     eax,eax
None.gif        
ret
None.gif
None.gif_ProcWinMain    endp
None.gif
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
_WinMain    proc
None.gif        local    
@stWndClass: WNDCLASSEX
None.gif        local    
@stMsg: MSG
None.gif
None.gif        invoke    GetModuleHandle,NULL
None.gif        
mov     hInstance,eax
None.gif        invoke    RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
None.gif
; ****************************************************************
None.gif;
 注册窗口类
None.gif;
****************************************************************
None.gif
        invoke    LoadCursor, 0 ,IDC_ARROW
None.gif        
mov     @stWndClass.hCursor,eax
None.gif        
push     hInstance
None.gif        
pop     @stWndClass.hInstance
None.gif        
mov     @stWndClass.cbSize,sizeof WNDCLASSEX
None.gif        
mov     @stWndClass.style,CS_HREDRAW  or  CS_VREDRAW
None.gif        
mov     @stWndClass.lpfnWndProc,offset _ProcWinMain
None.gif        
mov     @stWndClass.hbrBackground,COLOR_WINDOW +  1
None.gif        
mov     @stWndClass.lpszClassName,offset szClassName
None.gif        invoke    RegisterClassEx,addr @stWndClass
None.gif
; ****************************************************************
None.gif;
 建立并显示窗口
None.gif;
****************************************************************
None.gif
        invoke    CreateWindowEx,WS_EX_CLIENTEDGE    ,offset szClassName,offset szCaptionMain,\
None.gif            WS_OVERLAPPEDWINDOW,\
None.gif            
50 , 50 , 200 , 150 ,\
None.gif            NULL,NULL,hInstance,NULL
None.gif        
mov     hWinMain,eax
None.gif        invoke    ShowWindow,hWinMain,SW_SHOWNORMAL
None.gif        invoke    UpdateWindow,hWinMain
None.gif
; ****************************************************************
None.gif;
 消息循环
None.gif;
****************************************************************
None.gif
        .while    TRUE
None.gif            invoke    GetMessage,addr @stMsg,NULL,
0 , 0
None.gif            .break    .if eax    == 
0
None.gif            invoke    TranslateMessage,addr @stMsg
None.gif            invoke    DispatchMessage,addr @stMsg
None.gif        .endw
None.gif        
ret
None.gif_WinMain    endp
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
start:
None.gif        
call     _WinMain
None.gif        invoke    ExitProcess,NULL
None.gif
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        end    start
None.gif


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

MakeFile文件:

None.gif LINK_FLAG  =   / subsystem :windows
None.gifML_FLAG 
=   / / coff
None.gifall: Sender
. exe Receiver . exe
None.gifSender
. exe: Sender . obj
None.gif    Link 
$( LINK_FLAG )  Sender . obj
None.gifReceiver
. exe: Receiver . obj
None.gif    Link 
$( LINK_FLAG )  Receiver . obj
None.gif
. asm . obj:
None.gif    ml 
$( ML_FLAG )   $<
None.gifclean:
None.gif    
del  * . obj
None.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值