我一直在尝试调试此代码。我的Process32First函数只是继续返回一个无效的值。我不知道它有什么问题。有人可以帮我解决这个问题吗?
include \masm32\include\masm32rt.inc
.data
err db "Error!",0
.data?
procData PROCESSENTRY32 <>
procH HANDLE ?
.code
start:
lea esi, procData
push 0
push TH32CS_SNAPPROCESS
call CreateToolhelp32Snapshot
mov procH, eax
mov procData.dwSize, sizeof PROCESSENTRY32
push offset procData
push procH
call Process32First
.if eax == 0
jmp _err
.endif
jmp _end
_err:
push offset err
call StdOut
_end:
push 0
call ExitProcess
end start
这是我的最新代码。
答案 0 :(得分:1)
您正在调用Process32FirstW
,Process32First
的Unicode(宽字符)版本。所以你需要一个宽字符版本的PROCESSENTRY32
,其中TCHAR被定义为WORD。 MASM32 SDK的windows.inc
没有这样的版本,但ANSI版本(TCHAR =&gt; BYTE)。据我所知,你不需要Unicode版本。取下大写&#34; W&#34;来自Process32FirstW
。
如果你绝对想要使用Unicode版本,你必须声明一个特殊的&#34; PROCESSENTRY32W&#34;结构:
include \masm32\include\masm32rt.inc
PROCESSENTRY32W STRUCT
dwSize DWORD ?
cntUsage DWORD ?
th32ProcessID DWORD ?
th32DefaultHeapID DWORD ?
th32ModuleID DWORD ?
cntThreads DWORD ?
th32ParentProcessID DWORD ?
pcPriClassBase DWORD ?
dwFlags DWORD ?
szExeFile dw MAX_PATH dup(?)
PROCESSENTRY32W ENDS
.data
err db "Error!",0
.data?
procData PROCESSENTRY32W <>
procH HANDLE ?
.code
start:
lea esi, procData
push 0
push TH32CS_SNAPPROCESS
call CreateToolhelp32Snapshot
mov procH, eax
;https://msdn.microsoft.com/de-de/library/windows/desktop/ms684834(v=vs.85).aspx
mov procData.dwSize, sizeof PROCESSENTRY32W
push offset procData
push procH
call Process32FirstW
.if eax == 0
jmp _err
.endif
printf ("%S\n", OFFSET procData.szExeFile)
jmp _end
_err:
push offset err
call StdOut
_end:
push 0
call ExitProcess
end start
答案 1 :(得分:0)
我找到了让它运行的另一种选择。我将process32FirstW和Process32NextW替换为了mas3232的include文件夹中的kernel32.inc和kernel32p.inc文件中的Process32First和Process32Next。之后我在masm32文件夹中运行makelibs.bat。我的代码可以运行。
希望这个选项也有帮助!