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 + -
显示快捷键?