我正在編寫程序,並無法打印出進程的進程ID。我已成功檢索過程的名稱,但是當我打印出過程ID時。它顯示了一切。以下是我的代碼。MASM32如何使用PROCESSENTRY32打印出進程ID
include \masm32\include\masm32rt.inc
.data
cFmt db "%d",0
cfr db 1024 dup(?)
.code
ProcessSearch proc
LOCAL sHndl :DWORD
push 0
push TH32CS_SNAPPROCESS
call CreateToolhelp32Snapshot
mov sHndl, eax
mov pData.dwSize, sizeof pData
push offset pData
push sHndl
call Process32First
push offset pData
push sHndl
call Process32Next
process:
push offset pData.th32ProcessID
push offset cFmt
push offset cfr
call wsprintf
push offset cfr
call StdOut
push offset pData
push sHndl
call Process32Next
cmp eax, 0
jg process
push sHndl
call CloseHandle
ret
ProcessSearch endp
start:
call ProcessSearch
call ExitProcess
end start
我想不通爲什麼我不能打印進程ID。
即使我們想要,我們也無法爲您調試此代碼,因爲它不代表[mcve]。例如,「cFmt」和「cfr」是什麼?它也不清楚是什麼意思,*「它顯示的都是一樣的。」*您是否嘗試過使用調試器來遍歷代碼,並查看它會誤入歧途? Visual Studio包含一個出色的調試器。或者在SDK中免費包含WinDbg。不確定MASM32是否附帶調試器;它可能是,你不能沒有一個組裝開發! –
由於您使用的是masm,爲什麼不使用'invoke'而不是'push/call'?這將簡化代碼很多。 – Michael
我已經用cFmt和cfr的重載值更新了代碼。我很瞭解如何調用可以簡化我的代碼。但是,我需要練習這種基本的編碼風格。 – Pentagon