MASM32如何使用PROCESSENTRY32打印出进程ID

时间:2017-06-09 10:03:56

标签: assembly masm msdn masm32

我正在开发一个程序,但是无法打印出该进程的进程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。

1 个答案:

答案 0 :(得分:0)

如果您向我们展示完整的代码,那将是很好的,这样我们就可以验证您的字符串/数据是否正确。即便没有,我也会看到一些问题:

Process32First检索第一个进程的数据,您需要1)检查返回值,2)打印出数据,然后再调用Process32Next

wsprintf不是stdcall,你应该在调用之后用lea esp,[esp+12]恢复堆栈。