.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
g_Hello db 'hello word!', 0
g_Title db 'Win32', 0
g_hInst dd ?
szFormat db '%d年%d月%d日%d:%d:%d', 0
.code
WndProc proto hWnd:HWND, message:UINT, wParam:WPARAM, lParam:LPARAM
MyRegisterClass proto hInstance:HINSTANCE
InitInstance proto hInstance:HINSTANCE
WinMain proc hInstance:HINSTANCE
LOCAL @msg:MSG
invoke MyRegisterClass,hInstance
invoke InitInstance,hInstance
.if !eax
mov eax,FALSE
ret
.endif
invoke GetMessage,addr @msg, NULL, 0, 0
.while eax
invoke TranslateMessage,addr @msg
invoke DispatchMessage,addr @msg
invoke GetMessage,addr @msg, NULL, 0, 0
.endw
mov eax,@msg.wParam
ret
WinMain endp
MyRegisterClass proc hInstance:HINSTANCE
LOCAL @wcex:WNDCLASSEX
invoke RtlZeroMemory, addr @wcex,sizeof WNDCLASSEX
mov @wcex.cbSize,sizeof WNDCLASSEX
mov @wcex.style,CS_HREDRAW or CS_VREDRAW
mov @wcex.lpfnWndProc,offset WndProc
;mov @wcex.cbClsExtra,0
;mov @wcex.cbWndExtra,0
push hInstance
pop @wcex.hInstance
;mov @wcex.hIcon,
;mov @wcex.hCursor,
mov @wcex.hbrBackground,COLOR_WINDOW+1
;mov @wcex.lpszMenuName,
mov @wcex.lpszClassName,offset g_Hello
;mov @wcex.hIconSm,
invoke RegisterClassEx,addr @wcex
ret
MyRegisterClass endp
InitInstance proc hInstance:HINSTANCE
LOCAL @hWnd:HWND
push hInstance
pop g_hInst
invoke CreateWindowEx, NULL, offset g_Hello, offset g_Title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL
mov @hWnd,eax
.if !@hWnd
mov eax,FALSE
ret
.endif
invoke ShowWindow, @hWnd, SW_SHOW
invoke UpdateWindow, @hWnd
mov eax,TRUE
ret
InitInstance endp
;void CALLBACK MyTimerCallBack(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
MyTimerCallBack proc hWnd:HWND, message:UINT,iTimerID:UINT,dwTime:DWORD
LOCAL @szBuffer[40]:dword
LOCAL @hdc:HDC
LOCAL @ps:PAINTSTRUCT
LOCAL @rt:RECT
LOCAL @stSYSTEMTIME:SYSTEMTIME
LOCAL @rectHigh:word
LOCAL @rectWidth:word
;LOCAL
invoke GetLocalTime,addr @stSYSTEMTIME
invoke GetDC,hWnd
mov @hdc,eax
;invoke wsprintf,addr @szBuffer, offset szFormat,@t.wYear,@t.wMonth,@t.wDay,@t.wHour,@t.wMinute,@t.wSecond
invoke GetClientRect,hWnd,addr @rt
mov ax,@stSYSTEMTIME.wYear
movzx eax,ax
mov @szBuffer,eax
mov ax,@stSYSTEMTIME.wMonth
movzx eax,ax
mov @szBuffer+4,eax
mov ax,@stSYSTEMTIME.wDay
movzx eax,ax
mov @szBuffer+8,eax
mov ax,@stSYSTEMTIME.wHour
movzx eax,ax
mov @szBuffer+12,eax
mov ax,@stSYSTEMTIME.wMinute
movzx eax,ax
mov @szBuffer+16,eax
mov ax,@stSYSTEMTIME.wSecond
movzx eax,ax
mov @szBuffer+20,eax
invoke wsprintf,addr @szBuffer,offset szFormat,@szBuffer,@szBuffer+4,@szBuffer+8,@szBuffer+12,@szBuffer+16,@szBuffer+20
xor eax,eax
mov @szBuffer+24,eax
invoke DrawText,@hdc,addr @szBuffer,20,addr @rt,DT_CENTER
MyTimerCallBack endp
WndProc proc hWnd:HWND, message:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL @hdc:HDC
LOCAL @ps:PAINTSTRUCT
LOCAL @rt:RECT
LOCAL @szHello[100]:byte
.if message == WM_PAINT
invoke BeginPaint,hWnd,addr @ps
mov @hdc,eax
invoke SetTimer,hWnd,0,1000,MyTimerCallBack
invoke EndPaint,hWnd,addr @ps
.elseif message == WM_DESTROY
invoke PostQuitMessage,0
.else
invoke DefWindowProc,hWnd,message,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
START:
invoke GetModuleHandle, NULL
invoke WinMain, eax
ret
end START
沒有注釋 我也是剛剛學 個人建議剛剛學的 先寫一遍SDK的 這樣比較好寫一點 由于這是武漢科銳逆向的當天作業其一 希望學弟們別直接抄 多看看。。過來人。。。有寫的 不好的 希望大佬多多指教
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/62334.html
標籤:匯編語言
上一篇:記錄學習scrapy第一天
