這是一個注冊機的ASM源代碼,能鏈接,能編譯,能產生EXE文件,但就是運行之後根本沒有任何反應,請教大家是怎麼回事?應該怎麼辦?
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include comctl32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
dlgproc proto :DWORD,:DWORD,:DWORD,:DWORD
.const
IDD_DLGKEYG equ 1000
IDC_EDTNAME equ 1001
IDC_EDTKEY equ 1004
IDC_BTNKEY equ 1005
IDC_BTNABOUT equ 1006
IDC_BTNEXIT equ 1007
.data
dlgtxt db "KeyGen by aal",0
dlgabout db "keygen by aal for KGM1Tal on 05/14/2006",0
lNameLen dd 0
szError db "Error",0
szNoName db "No name?"
s1 dd 0
s2 dd 0
s3 dd 0
sKey db 0,'E',7 dup(0),0,0
c_1 db "ZWATRQLCGHPSXYENVBJDFKMU",0
.data?
sname db 40 dup(?)
hInstance dd ?
.code
start:
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,eax,IDD_DLGKEYG,NULL,offset dlgproc,0
invoke ExitProcess,NULL
dlgproc proc hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke InitCommonControls
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDC_BTNKEY
invoke RtlZeroMemory,addr sname,40
invoke GetDlgItemText,hWnd,IDC_EDTNAME,addr sname,sizeof sname
mov lNameLen,eax
cmp eax,0
jz _NoName
xor ecx,ecx
xor ebx,ebx
_SumName:
mov al,byte ptr [sname+ecx]
cmp al,0
jz exit1
add bl,al
inc ecx
;cmp ecx,dword ptr [lNameLen]
;jne _SumName
jmp _SumName
exit1:
mov byte ptr [s1],bl
mov eax,dword ptr [s1]
mov ecx,18h
cdq
idiv ecx
mov byte ptr [s2],dl
cmp dl,18h
jbe _char1
sub dl,18h
_char1:
mov byte ptr [s3],dl
movzx edx,dl
mov al,byte ptr [c_1+edx]
mov byte ptr [sKey],al
mov dl,byte ptr [s3]
mov al,dl
add al,dl
cmp al,18h
jbe _char3
sub al,18h
_char3:
mov byte ptr[s3],al
movzx eax,al
mov bl,byte ptr[c_1+eax]
mov byte ptr[sKey+2],bl
mov ecx,3
_gonxt:
mov dl,bl
sub dl,41h
add al,dl
cmp al,18h
jbe _nxtchar
sub al,18h
_nxtchar:
mov byte ptr[s3],al
movzx eax,al
mov bl,byte ptr[c_1+eax]
mov byte ptr[sKey+ecx],bl
inc ecx
cmp ecx,09h
jnz _gonxt
xor ecx,ecx
xor eax,eax
_keysum:
mov bl,byte ptr[sKey+ecx]
movzx ebx,bl
add eax,ebx
inc ecx
cmp ecx,09h
jne _keysum
;mov ecx,09h
cdq
idiv ecx
mov byte ptr[sKey+9],al
invoke SetDlgItemText,hWnd,IDC_EDTKEY,addr sKey
jmp _OK
_NoName:
invoke MessageBox,hWnd,addr szNoName,addr szError,MB_OK
_OK:
.elseif eax == IDC_BTNABOUT
invoke MessageBox,hWnd,addr dlgabout,addr dlgtxt,MB_OK
.elseif eax == IDC_BTNEXIT
invoke EndDialog,hWnd,NULL
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
dlgproc endp
end start
使用Masm32 v9編譯,鏈接編譯批處理文件如下:
@echo off
path=d:\masm32\bin;%path%
set include=d:\masm32\include;
set lib=d:\masm32\lib;
ml /c /coff smallKeyg.asm
link /subsystem:windows smallKeyg.obj
pause