首页
社区
课程
招聘
[分享]WIN32应用程序简单版
发表于: 2008-5-9 20:14 3977

[分享]WIN32应用程序简单版

2008-5-9 20:14
3977
仅做为本人收藏之用,便于以后抄袭,放在自己电脑上老找不到,不如放在本论坛上,一下就能找到.
;---------------------------------------;
;    DDRAW  Demo                  ;
;                                       ;
;    Author :         Jacksheng         ;
;    ASM version :    Ewald Snel        ;
;---------------------------------------;

; View with TAB size 4

                TITLE WIN32ASM EXAMPLE
                .486
                .MODEL FLAT, STDCALL
                option casemap :none

;-----------------------------------------------------------;
;                WIN32ASM / DDRAW DEMO                           ;
;-----------------------------------------------------------;

INCLUDE         windows.inc
INCLUDE         gdi32.inc
INCLUDE         kernel32.inc
INCLUDE         user32.inc
INCLUDE         ddraw.inc

INCLUDELIB         gdi32.lib
INCLUDELIB         kernel32.lib
INCLUDELIB         user32.lib
INCLUDELIB         ddraw.lib

ICO_MAIN        equ        1000h

FATAL                MACRO        msg
                LOCAL         @@msg
                .DATA
                @@msg        db        msg, 0
                .CODE
                INVOKE        MessageBox, hWnd, ADDR @@msg, ADDR szDisplayName, MB_OK
                INVOKE        ExitProcess, 0
ENDM

RGB macro red,green,blue
        xor eax,eax
        mov ah,blue
        shl eax,8
        mov ah,green
        mov al,red
endm


宏:
szText MACRO Name, Text:VARARG
    LOCAL lbl
    jmp lbl
    Name db Text,0
    lbl:
ENDM
使用:
.code
szText s_title,"测试"
invoke MessageBox,0,offset s_title,offset s_title,48
是不是比较好用呢?因为这个宏会将字符串定义在代码段,所以不
充许改变串的内容!..但另一方面也起到了反反汇编的效率,不信
你用W32Dasm打开看看...
; 数据段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                 .data?
hInstance        dd         ?
hWinMain         dd         ?

                 .const

;szClassName         db    'MyClass',0
szCaptionMain         db    'My first Window !',0
szText                db    'Win32 Assembly, Simple and powerful !',0
szClassName        db                                        "DDRAW Plasma Demo", 0        ; class name
szDisplayName        EQU                                        <szClassName>                        ; window name
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代码段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                 .code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 窗口过程

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcWinMain     proc                  uses ebx edi esi,hWnd,uMsg,wParam,lParam
                 local                 @stPs:PAINTSTRUCT
                 local                 @stRect:RECT
                 local                 @hDc
                 mov                   eax,uMsg
;********************************************************************
                 .if              eax ==        WM_PAINT
                                  invoke  BeginPaint,hWnd,addr @stPs
                                  mov     @hDc,eax
                                  invoke  GetClientRect,hWnd,addr @stRect
                                  invoke  DrawText,@hDc,addr szText,-1,\
                                           addr @stRect,\
                                           DT_SINGLELINE or DT_CENTER or DT_VCENTER
                                  invoke  EndPaint,hWnd,addr @stPs
;********************************************************************
                 .elseif          eax ==         WM_CLOSE
                                 FATAL "Please accept Quit!"
                                  invoke  DestroyWindow,hWinMain
                                  invoke  PostQuitMessage,NULL
;********************************************************************
                 .else
                                  invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
                                ret
                 .endif
;********************************************************************
                 xor              eax,eax
                 ret
_ProcWinMain     endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain         proc
                 local            @stWndClass:WNDCLASSEX
                 local            @stMsg:MSG
                 invoke           GetModuleHandle,NULL
                 mov                   hInstance,eax
                 invoke           RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

;********************************************************************
; 注册窗口类
;********************************************************************
                invoke                LoadIcon,NULL,IDI_INFORMATION
                mov                @stWndClass.hIcon,eax
                    invoke           LoadCursor,0,IDC_ARROW
                mov              @stWndClass.hCursor,eax
                push             hInstance
                pop              @stWndClass.hInstance
                mov              @stWndClass.cbSize,sizeof WNDCLASSEX
                mov             @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                mov              @stWndClass.lpfnWndProc,offset _ProcWinMain
                INVOKE                GetStockObject, BLACK_BRUSH
                ;mov                [wc.hbrBackground], eax
                mov              @stWndClass.hbrBackground,eax;COLOR_WINDOW + 1
                mov              @stWndClass.lpszClassName,offset szClassName
                invoke           RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
                invoke           CreateWindowEx,WS_EX_CLIENTEDGE,\
                                 offset szClassName,offset szCaptionMain,\
                                 WS_OVERLAPPEDWINDOW,\
                                 100,100,600,400,\
                                 NULL,NULL,hInstance,NULL
                mov              hWinMain,eax
                invoke           ShowWindow,hWinMain,SW_SHOWNORMAL
                invoke           UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
                 .while           TRUE
                                  invoke    GetMessage,addr @stMsg,NULL,0,0
                                  .break    .if eax  == 0
                                  invoke    TranslateMessage,addr @stMsg
                                  invoke    DispatchMessage,addr @stMsg
                 .endw
                 ret
                 
_WinMain         endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                 call             _WinMain
                 invoke           ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                 end              start

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
???
有什么特别之处吗?
2008-5-9 23:11
0
游客
登录 | 注册 方可回帖
返回
//