creatpro.asm
来自「windows下汇编语言 学习汇编语言好助手」· 汇编 代码 · 共 89 行
ASM
89 行
;************************
;文件:CreatPro.asm *
;功能:演示如何创建进程 *
;************************
.386p
locals
.model flat,stdcall
include win32.inc
include CreatPro.inc
extrn MessageBoxA:proc
extrn ExitProcess:proc
extrn DialogBoxParamA:proc
extrn EndDialog:Proc
extrn GetDlgItem:proc
extrn GetDlgItemTextA:proc
extrn SetDlgItemTextA:proc
extrn CreateProcessA:proc
extrn CloseHandle:proc
extrn VirtualAllocEx:proc
extrn VirtualFreeEx:proc
extrn GetModuleHandleA:proc
extrn GetLastError:proc
IDC_PROCESS = 100
MEM_COMMIT = 1000H
PAGE_EXECUTE_READWRITE = 40H
.data
align 4
SUI STARTUPINFO<17*4,>
PI PROCESS_INFOMATION<>
DialogName db 'MyDialog',0
CaptionFail db '失败',0
TextFail db 'API:DialogBoxParamA调用失败!',0
TextCPA db '创建进程失败!',0
align 4
FileName db 'c:\pwin98\notepad.exe',0
db 1000 dup(?)
.code
WinMain:
call GetModuleHandleA,0 ;取模块句柄
call DialogBoxParamA,eax,offset DialogName,0,offset DialogProc,0
cmp eax,0 ;调用DialogBoxParamA失败?
jnz Exit
mov eax,offset TextFail ;出错信息
call MessageBoxA,0,eax,offset CaptionFail,MB_OK
Exit:
call ExitProcess,0
;消息处理函数
DialogProc proc uses ebx edi esi, hWnd:DWORD, wMsg:DWORD, wParam:DWORD, lParam:DWORD
cmp wMsg,WM_INITDIALOG
jz WmInitDialog
cmp wMsg,WM_CLOSE
jz WmClose
cmp wMsg,WM_COMMAND
jz WmCommand
jmp ExitProc
WmInitDialog:
;显示程序名
call SetDlgItemTextA,hWnd,IDC_PROCESS,offset FileName
jmp ExitProc
WmClose:
call EndDialog,hWnd,1
jmp ExitProc
WmCommand:
mov ebx,wParam
cmp bx,IDOK
jnz ExitProc
call GetDlgItemTextA,hWnd,IDC_PROCESS,offset FileName,100 ;取程序名
call CreateProcessA,offset FileName,0,0,0,FALSE,0,0,0,offset SUI,offset PI
or eax,eax ;创建进程失败
mov ebx,offset TextCPA
jz ErrMsg
call CloseHandle,PI.hProcess
call CloseHandle,PI.hThread
jmp ExitProc
ErrMsg:
call GetLastError
call MessageBoxA,0,ebx,offset CaptionFail,MB_OK
jmp ExitProc
ExitProc:
xor eax,eax
ret
DialogProc endp
end WinMain
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?