別のプログラム(プロセス)を起動するプログラムを作成したいと思います。私はVisual Studio 2015のMASM64(ml64.exe)を使用しています。MASM64(ml64.exe)でCreateProcessA関数が動作しません
プログラムが動作しません。何も表示されません。デバッガで私はアクセス違反を取得します。
私のコードに何が間違っているかわかりません。
マイコード:
extrn ExitProcess : proc
extrn MessageBoxA : proc
extrn CreateProcessA : proc
PROCESS_INFORMATION struct
hProcess DWORD ?
hThread DWORD ?
dwProcessId DWORD ?
dwThreadId DWORD ?
PROCESS_INFORMATION ends
STARTUPINFOA struct
cb DWORD ?
lpReserved DWORD ?
lpDesktop DWORD ?
lpTitle DWORD ?
dwX DWORD ?
dwY DWORD ?
dwXSize DWORD ?
dwYSize DWORD ?
dwXCountChars DWORD ?
dwYCountChars DWORD ?
dwFillAttribute DWORD ?
dwFlags DWORD ?
wShowWindow WORD ?
cbReserved2 WORD ?
lpReserved2 DWORD ?
hStdInput DWORD ?
hStdOutput DWORD ?
hStdError DWORD ?
STARTUPINFOA ends
.const
MB_ICONINFORMATION equ 40h
ERROR_ALREADY_EXISTS equ 0B7h
NORMAL_PRIORITY_CLASS equ 020h
.data
szText db "This is first application which creates new process using CreateProcessA.", 00h
szCaption db "Information",00h
processInfo PROCESS_INFORMATION <>
startupInfo STARTUPINFOA <>
szProcName db "D:\Apps\SampleApp.exe", 00h
.code
Main proc
;not sure if correct - begin
lea rax, processInfo
lea rbx, startupInfo
sub rsp, 60h
push rax
push rbx
push 00h
push 00h
push NORMAL_PRIORITY_CLASS
push 00h
mov r9, 00h
mov r8, 00h
mov rdx, 00h
lea rcx, szProcName
call CreateProcessA
add rsp, 60h
;not sure if correct - end
sub rsp, 28h
mov r9, MB_ICONINFORMATION
lea r8, szCaption
lea rdx, szText
xor rcx, rcx
call MessageBoxA
add rsp, 28h
Exit:
xor rcx, rcx
call ExitProcess
Main endp
end
あなたの助けを事前に感謝
@echo off
ml64.exe prog1.asm /link /entry:Main /subsystem:windows /defaultlib:"kernel32.Lib" /defaultlib:"user32.Lib"
pause
あるbuild.bat。
スタックポインタは、任意のAPI呼び出しの前に、16バイトにアラインする必要がありますが、あなたはコールCreateProcessA前にこれをしない全体のパラメータリストを割り当てますクラッシュのために十分な – RbMm
私は 'sub rsp、60h'を持っています。私はこれを 'sub rsp、58h'に変更しましたが、まだ動作しません...どのような価値があるはずですか? – Dave
クラッシュのためにデバッガは既に存在しません。 – RbMm