奇怪的问题 枚举 windows进程的问题

dalixux 2008-09-28 09:38:30
下面是我写的枚举进程的代码 直接运行的时候可以正常工作枚举进程 但是OD加载进去后 Process32Next这个函数返回值是0 运行不成功
加入GetLastError() 返回的错误代码也是0
拷贝了MSDN 上的代码 也是同样的问题 直接运行可以 但是 OD加载了运行就不行 各位帮看下 是不是我机器的问题
用汇编重写了下 汇编里 直接运行也是Process32Next错误 返回的错误代码是参数不合法
#include "windows.h"
#include "stdio.h"
#include "stdlib.h"
#include <tlhelp32.h>

void main(void)
{
PROCESSENTRY32 Process;
HANDLE hSap;
int bret;
hSap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSap == INVALID_HANDLE_VALUE)
{
printf("create snap error\n");
return;
}
RtlZeroMemory(&Process, sizeof (PROCESSENTRY32));
Process.dwSize = sizeof (PROCESSENTRY32);
bret = Process32First(hSap, &Process);
if(!bret)
{
printf("first error\n");
return;
}
do
{
printf("%s\n",Process.szExeFile);
if(0 == lstrcmp(Process.szExeFile, "taskmgr.exe"))
break;
}while(Process32Next(hSap,&Process));

}

汇编:
.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

.data
szTask db "taskmgr.exe",0
ProcessIds dd 1024 dup(0)
szText db "success",0
.data?
hProcess dd ?
stProcess PROCESSENTRY32 <?>
hSnap dd ?

.code

start:
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
.if eax == INVALID_HANDLE_VALUE
ret
.endif
mov hSnap,eax
invoke RtlZeroMemory,addr stProcess,sizeof PROCESSENTRY32
mov stProcess.dwSize,sizeof PROCESSENTRY32
invoke Process32First,hSnap,addr stProcess
.if eax == FALSE
ret
.endif
invoke lstrcmp,addr szTask,addr stProcess.szExeFile
.if eax != 0
@mm:
invoke Process32Next,hSnap, offset stProcess
.if eax == FALSE
invoke MessageBox,NULL,NULL,NULL,MB_OK
ret
.endif
invoke lstrcmp,addr szTask, addr stProcess.szExeFile
or eax,eax
jnz @mm
.endif
invoke MessageBox,NULL,szText,NULL,MB_OK
ret


end start

...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dalixux 2008-09-28
  • 打赏
  • 举报
回复
俺还想知道汇编的有问题么?
C的我这里运行也正常 只是调试器加载以后 不正常 可能 是被OD 的隐藏插件 给HOOK了
汇编的无调试器 直接运行 也是 Process32Next那边 调用不成功 返回的错误代码 是 参数不合法
Process32First 调用成功 谁能看下 我汇编的代码 哪里错了?
[Quote=引用 4 楼 xkyx_cn 的回复:]
我这儿运行没问题:
C/C++ code

/*
[System Process]
System
smss.exe
csrss.exe
wininit.exe
csrss.exe
services.exe
lsass.exe
lsm.exe
winlogon.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
audiodg.exe
SLsvc.exe
svchost.exe
svchost.exe
spoolsv.exe
svchost.exe
taskeng.exe
dwm.exe
explorer.exe
taskeng.exe
MSASCui.exe
GrooveMonitor.exe
WebThunder.exe
rundll32.exe
rundll32.…
[/Quote]
xkyx_cn 2008-09-28
  • 打赏
  • 举报
回复
我这儿运行没问题:

/*
[System Process]
System
smss.exe
csrss.exe
wininit.exe
csrss.exe
services.exe
lsass.exe
lsm.exe
winlogon.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
audiodg.exe
SLsvc.exe
svchost.exe
svchost.exe
spoolsv.exe
svchost.exe
taskeng.exe
dwm.exe
explorer.exe
taskeng.exe
MSASCui.exe
GrooveMonitor.exe
WebThunder.exe
rundll32.exe
rundll32.exe
sidebar.exe
ehtray.exe
msnmsgr.exe
wmpnscfg.exe
ONENOTEM.EXE
ehmsas.exe
sqlservr.exe
svchost.exe
sqlwriter.exe
svchost.exe
vmware-authd.exe
vmount2.exe
vmnat.exe
svchost.exe
SearchIndexer.exe
vmnetdhcp.exe
wmpnetwk.exe
usnsvc.exe
MSDEV.EXE
Maxthon.exe
TrustedInstaller.exe
MSDEV.EXE
conime.exe
VCSPAWN.EXE
kitscode.exe
Press any key to continue
*/

VC6 + Vista

[Quote=引用 3 楼 dalixux 的回复:]
不知道是不是权限 的问题。。。
C写的 可能跟OD 有关
关键是汇编写的 直接运行 也不行 是不是我的汇编代码有什么错误?
各位能不能先肯定一下 代码有无问题? 翻MSDN 要疯了
[/Quote]
dalixux 2008-09-28
  • 打赏
  • 举报
回复
不知道是不是权限 的问题。。。
C写的 可能跟OD 有关
关键是汇编写的 直接运行 也不行 是不是我的汇编代码有什么错误?
各位能不能先肯定一下 代码有无问题? 翻MSDN 要疯了
yeah920 2008-09-28
  • 打赏
  • 举报
回复
帮忙顶一下,让了解的人来解答.
晨星 2008-09-28
  • 打赏
  • 举报
回复
会不会是权限的问题?
我还遇到过Debug可以而Release不可以的情况。最后加入正式系统服务代码中,以System的身份运行,便都没问题了。
dalixux 2008-09-28
  • 打赏
  • 举报
回复
LS 一语解惑啊
都是插件的缘故

调用都没问题
怎么结贴?
rularys 2008-09-28
  • 打赏
  • 举报
回复
然后用OD调试一下你的汇编程序就有结果了。楼主记得要释放资源
rularys 2008-09-28
  • 打赏
  • 举报
回复

OD 插件吧。你把隐藏OD的选项:“Process32Next” 不打勾试试

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧