C++ 列出所有正在运行的应用程序MASM32程序集
你好!我一直在尝试列出所有当前运行的应用程序,并使用masm将其写入文本文件。我是汇编新手,但使用MSDN作为参考。到目前为止,我知道如何使用CreateFile、WriteFile、ReadFile等,但我不知道Process32First是如何工作的 我正在尝试将此链接中的代码转换为MASM,(),但是运气不好,我无法获得任何输出 我将非常感谢任何帮助!非常感谢。祝你今天愉快C++ 列出所有正在运行的应用程序MASM32程序集,c++,assembly,masm,msdn,masm32,C++,Assembly,Masm,Msdn,Masm32,你好!我一直在尝试列出所有当前运行的应用程序,并使用masm将其写入文本文件。我是汇编新手,但使用MSDN作为参考。到目前为止,我知道如何使用CreateFile、WriteFile、ReadFile等,但我不知道Process32First是如何工作的 我正在尝试将此链接中的代码转换为MASM,(),但是运气不好,我无法获得任何输出 我将非常感谢任何帮助!非常感谢。祝你今天愉快 include \masm32\include\masm32rt.inc .data pe32 PROCE
include \masm32\include\masm32rt.inc
.data
pe32 PROCESSENTRY32 <>
errorCreateTool db "ERROR: CreateToolhelp32Snapshot", 0
errorPF db "ERROR: Process32First", 0
errorOP db "ERROR: OpenProcess", 0
yesMsg db "proceed", 0
.data?
dwPriorityClass dd ?
hProcessSnap HANDLE ?
hProcess HANDLE ?
.code
_start:
push 0
push TH32CS_SNAPPROCESS
call CreateToolhelp32Snapshot
mov hProcessSnap, eax
cmp hProcessSnap, INVALID_HANDLE_VALUE
je _errorCT
mov pe32.dwSize, sizeof PROCESSENTRY32
push offset pe32
push hProcessSnap
call Process32FirstW
cmp eax, ERROR_NO_MORE_FILES
je _errorPF
push offset pe32.szExeFile
call StdOut
mov dwPriorityClass, 0
push offset pe32.th32ProcessID
push FALSE
push PROCESS_ALL_ACCESS
call OpenProcess
cmp eax, 00H ;if I comment this out, the code will proceed
je _errorOpen
push offset pe32.th32ProcessID ;but this doesn't have any value and doesn't print out
call StdOut
push offset yesMsg ;while this prints out on the console
call StdOut
jmp _done
_errorOpen:
push offset errorOP
call StdOut
jmp _done
_errorPF:
push offset errorPF
call StdOut
jmp _done
_errorCT:
push offset errorCreateTool
call StdOut
_done:
push 0
call ExitProcess
end _start
include\masm32\include\masm32rt.inc
.数据
pe32进程32
errorCreateTool数据库“错误:CreateToolhelp32Snapshot”,0
errorPF db“错误:Process32First”,0
errorOP db“错误:OpenProcess”,0
yesMsg db“继续”,0
.数据?
dwPriorityClass dd?
HPSNAP句柄?
进程句柄?
.代码
_开始:
推0
推送TH32CS\U SNAPPROCESS
调用CreateToolhelp32Snapshot
mov HProcessnap,eax
cmp hProcessSnap,无效的\u句柄\u值
我错了
mov pe32.dwSize,进程大小32
推偏pe32
推送hProcessSnap
调用Process32FirstW
cmp eax,错误\u没有\u更多\u文件
我错了
推送偏移量pe32.szexe文件
呼叫StdOut
mov dwPriorityClass,0
推送偏移量pe32.th32ProcessID
推错
推送进程\u所有\u访问
调用OpenProcess
cmp-eax,00H;如果我把这个注释掉,代码将继续
我开错了
推送偏移量pe32.th32ProcessID;但这没有任何价值,也不会打印出来
呼叫StdOut
推送偏移量;在控制台上打印时
呼叫StdOut
jmp_完成了
_错误打开:
推偏误差
呼叫StdOut
jmp_完成了
_errorPF:
推偏误差
呼叫StdOut
jmp_完成了
_错误代码:
推送偏移错误创建工具
呼叫StdOut
_完成:
推0
呼叫退出过程
结束/开始
我有使用该功能的经验。我所要做的就是按照您的建议更新我的kernel32.inc和kernel32p.inc。完成这些操作后,我在masm32文件夹中运行makelibs.bat,它就可以从那里开始工作。我有过使用该函数的经验。我所要做的就是按照您的建议更新我的kernel32.inc和kernel32p.inc。完成这些操作后,我在masm32文件夹中运行makelibs.bat,它将从那里开始工作。StdOut
打印以零结尾的字符串<代码>pe32。th32ProcessID不是字符串。(顺便说一句,你确定想要unicode版本的Process32First
?)嗨,Michael!谢谢你的评论。我刚刚意识到我不需要获取th32ProcessID。我所需要的只是exe文件名,它现在正在工作。我所做的只是将kernel32.inc和kernel32p.inc中的Process32FirstW更改为Process32First,Process32NextW更改为Process32Next。谢谢你的提示!:)<代码>标准输出打印以零结尾的字符串<代码>pe32。th32ProcessID不是字符串。(顺便说一句,你确定想要unicode版本的Process32First
?)嗨,Michael!谢谢你的评论。我刚刚意识到我不需要获取th32ProcessID。我所需要的只是exe文件名,它现在正在工作。我所做的只是将kernel32.inc和kernel32p.inc中的Process32FirstW更改为Process32First,Process32NextW更改为Process32Next。谢谢你的提示!:)对我也是这么做的。无论如何,谢谢你。:)别这样!如果你的文件有问题,没有人能帮你。我找不到一个MASM32版本,其中Process32First
(ANSI版本-没有Process32FirstA)和Process32Next
失败。报告的错误适用于Unicode。宁愿得到这个软件并安装它。是的!我也是这么做的。无论如何,谢谢你。:)别这样!如果你的文件有问题,没有人能帮你。我找不到一个MASM32版本,其中Process32First
(ANSI版本-没有Process32FirstA)和Process32Next
失败。报告的错误适用于Unicode。而是获取并安装它。