?? test.asm
字號:
;MD5算法 Message-Digest Algorithm
.386
.Model Flat, StdCall
Option Casemap :None
include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
includelib comdlg32.lib
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; 包含函數庫
include sha1\sha1.inc
includelib sha1\sha1.lib
;include sha256\sha256.inc
;includelib sha256\sha256.lib
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
IDC_BUTTON equ 1
IDC_EDIT equ 2
.code
WindowsName db "sha256計算例程",0
MainClassName db "WinASM_Class",0
.data?
hWndMain dd ?
hInstance dd ?
msg MSG <?>
hwEdit dd ?
FileName db MAX_PATH dup (?)
.code
;===============
FileHash proc uses ebx esi edi
local @hFile,pSrcData,SrcSize,DecDat[8]
local TxtBuf[64]:byte
invoke CreateFileA,addr FileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
mov @hFile,eax
inc eax
je Result
invoke GetFileSize,eax,0
mov SrcSize,eax
invoke GlobalAlloc,GMEM_FIXED,eax
mov pSrcData,eax
invoke ReadFile,@hFile,pSrcData,SrcSize,addr SrcSize,0
invoke CloseHandle,@hFile
;----------
invoke SHA1_GetCode,pSrcData,SrcSize,addr DecDat
xor esi,esi
ds01: mov al,byte ptr DecDat[esi]
mov ah,al
shr al,4
and ah,0Fh
cmp ah,9
jbe ds02
add ah,7
ds02: cmp al,9
jbe ds03
add al,7
ds03: add ax,3030h
mov word ptr TxtBuf[2*esi],ax
inc esi
cmp esi,20;32
jb ds01
mov TxtBuf[2*esi],0
invoke SetWindowText,hwEdit,addr TxtBuf
;----------
invoke GlobalFree,pSrcData
Result: ret
FileHash endp
;===============
FilterString db "全部文件(*.*)",0,"*.*",0,0
;-------------------------------------
OpenFileNameDlg proc
local ofn:OPENFILENAME
invoke RtlZeroMemory,addr ofn,sizeof ofn
mov ofn.lStructSize,sizeof ofn
push hWndMain
pop ofn.hwndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter,offset FilterString
mov ofn.lpstrFile,offset FileName
mov byte ptr [FileName],0
mov ofn.nMaxFile,sizeof FileName
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
invoke GetOpenFileName,addr ofn
ret
OpenFileNameDlg endp
;===============
OnMainCommand proc wParam
cmp wParam,IDC_BUTTON
jnz Result
invoke OpenFileNameDlg
or eax,eax
jz Result
invoke FileHash
Result: ret
OnMainCommand endp
;==================================
szButton db "button",0
szEdit db "edit",0
szTest db "選擇文件",0
OnMainCreat proc hWnd
local @font
local @rc:RECT
invoke GetStockObject,DEFAULT_GUI_FONT
mov @font,eax
invoke GetClientRect,hWnd,addr @rc
invoke CreateWindowEx,0,addr szButton,addr szTest,\
WS_CHILD or WS_TABSTOP or WS_VISIBLE,\
150,3,100,25,hWnd,IDC_BUTTON,hInstance,NULL
invoke SendMessage,eax,WM_SETFONT,@font,0
mov edx,@rc.bottom
sub edx,30
invoke CreateWindowEx,WS_EX_CLIENTEDGE,addr szEdit,0,\
WS_CHILD or WS_TABSTOP or WS_VISIBLE or ES_MULTILINE,\
0,30,@rc.right,edx,hWnd,IDC_EDIT,hInstance,NULL
mov hwEdit,eax
ret
OnMainCreat endp
;=================================================
WndProc proc hWnd,uMsg,wParam,lParam
mov eax,uMsg
Msg_Create: cmp eax,WM_CREATE
jnz Msg_Command
invoke OnMainCreat,hWnd
jmp RetFalse
Msg_Command: cmp eax,WM_COMMAND
jnz Msg_Destroy
invoke OnMainCommand,wParam
jmp RetFalse
Msg_Destroy: cmp eax,WM_DESTROY
jnz Msg_DefWin
invoke PostQuitMessage,NULL
jmp RetFalse
Msg_DefWin: leave
jmp DefWindowProc
RetFalse: sub eax,eax
Result: ret
WndProc endp
;==================================
WinMain proc uses ebx esi edi
local @rect1:RECT,@rect2:RECT
local @wc:WNDCLASSEX
invoke RtlZeroMemory,addr @wc,sizeof @wc
mov @wc.cbSize,sizeof WNDCLASSEX
mov @wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov @wc.lpfnWndProc,offset WndProc
push hInstance
pop @wc.hInstance
mov @wc.hbrBackground,COLOR_BTNFACE+1
mov @wc.lpszMenuName,NULL
mov @wc.lpszClassName,offset MainClassName
invoke LoadIcon,0,7F05h
mov @wc.hIcon,eax
invoke LoadCursor,NULL,IDC_ARROW
mov @wc.hCursor,eax
invoke RegisterClassEx,addr @wc
invoke CreateWindowEx,NULL,addr MainClassName,addr WindowsName,\
WS_CAPTION OR WS_SYSMENU OR WS_MINIMIZEBOX or WS_VISIBLE,\
CW_USEDEFAULT,CW_USEDEFAULT,450,300,NULL,NULL,hInstance,NULL
mov hWndMain,eax
ret
WinMain endp
;=========================================
start: invoke GetModuleHandle,NULL
mov hInstance,eax
call WinMain
invoke UpdateWindow,hWndMain
StartLoop: invoke GetMessage,addr msg,NULL,0,0
cmp eax,0
je ExitLoop
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
jmp StartLoop
ExitLoop: mov eax,msg.wParam
invoke ExitProcess,eax
;=======================================
end start
Message-Digest Algorithm
B7ABA441912A91772E5441C76C361DE68EAB867C79017570D8470C59A244D1A2
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -