Assembly MASM32进程32W不工作
我一直在调试这段代码。我的Process32First函数一直返回无效值。我不知道它怎么了。有人能帮我解决这个问题吗Assembly MASM32进程32W不工作,assembly,x86,msdn,masm32,Assembly,X86,Msdn,Masm32,我一直在调试这段代码。我的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_SNAPPROCE
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
include\masm32\include\masm32rt.inc
.数据
err db“Error!”,0
.数据?
procData PROCESSENTRY32
程序句柄?
.代码
开始:
lea esi,procData
推0
推送TH32CS\U SNAPPROCESS
调用CreateToolhelp32Snapshot
mov程序,eax
mov procData.dwSize,PROCESSENTRY32的大小
推送偏移数据
推送程序
先调用进程32
。如果eax==0
jmp_err
.endif
jmp_端
_错误:
推偏错误
呼叫StdOut
_完:
推0
呼叫退出过程
结束-开始
这是我的最新代码。您正在调用的
Process32FirstW
,是的Unicode(宽字符)版本。所以您需要一个宽字符版本的,其中TCHAR被定义为WORD。MASM32 SDK的windows.inc
没有这样的版本,而是ANSI版本(TCHAR=>BYTE)。据我所知,您不需要Unicode版本。从Process32FirstW
中删除大写字母“W”
如果您绝对希望使用Unicode版本,则必须声明一个特殊的“PROCESSENTRY32W”结构:
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
include\masm32\include\masm32rt.inc
PROCESSENTRY32W结构
德沃德?
德沃德?
德沃德?
是希皮·德沃德吗?
德沃德先生?
德沃德?
th32ParentProcessID-DWORD?
pcPriClassBase-DWORD?
德沃德?
szExeFile dw MAX_PATH dup(?)
PROCESSENTRY32W结束
.数据
err db“Error!”,0
.数据?
procData PROCESSENTRY32W
程序句柄?
.代码
开始:
lea esi,procData
推0
推送TH32CS\U SNAPPROCESS
调用CreateToolhelp32Snapshot
mov程序,eax
;https://msdn.microsoft.com/de-de/library/windows/desktop/ms684834(v=vs.85).aspx
mov procData.dwSize,PROCESSENTRY32W的大小
推送偏移数据
推送程序
调用Process32FirstW
。如果eax==0
jmp_err
.endif
printf(“%S\n”,偏移量procData.szExeFile)
jmp_端
_错误:
推偏错误
呼叫StdOut
_完:
推0
呼叫退出过程
结束-开始
我找到了另一个让它运行的方法。在masm32的include文件夹中的kernel32.inc和kernel32p.inc文件中,我用Process32First和Process32NextW替换了Process32FirstW和Process32NextW。之后,我在masm32文件夹中运行makelibs.bat。我的代码也能工作
希望这个选择也能有所帮助 谢谢你!你在编码方面帮了我大忙。