我正在开发一个程序,但是无法打印出该进程的进程ID。我已经成功检索了进程的名称,但是当我打印出进程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。
答案 0 :(得分:0)
如果您向我们展示完整的代码,那将是很好的,这样我们就可以验证您的字符串/数据是否正确。即便没有,我也会看到一些问题:
Process32First
检索第一个进程的数据,您需要1)检查返回值,2)打印出数据,然后再调用Process32Next
。
wsprintf
不是stdcall,你应该在调用之后用lea esp,[esp+12]
恢复堆栈。