Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MASM32进程32W不工作_Assembly_X86_Msdn_Masm32 - Fatal编程技术网

Assembly MASM32进程32W不工作

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

我一直在调试这段代码。我的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
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。我的代码也能工作


希望这个选择也能有所帮助

谢谢你!你在编码方面帮了我大忙。