首页
社区
课程
招聘
[求助]关于获取特定进程ID的代码问题
发表于: 2009-12-1 22:11 4109

[求助]关于获取特定进程ID的代码问题

2009-12-1 22:11
4109
我打算用这段代码完成获取特定进程ID的功能,但出现了个错误,我研究了下应该是数据类型的问题,但我试了很多方法都没能改好,麻烦各位大哥给看看该怎么改?

.data
pid dd ?
hSnapShot dd ?
szProcessName db MAX_PATH dup (?)

.code

GetID proc

local        @stProcess:PROCESSENTRY32
invoke        RtlZeroMemory,addr @stProcess,sizeof @stProcess
mov @stProcess.dwSize,sizeof @stProcess
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
mov hSnapShot,eax
invoke Process32First,hSnapShot,addr @stProcess
.while eax
        .break .if @stProcess.szExeFile == szProcessName
        invoke Process32Next,hSnapShot,addr @stProcess
.endw
invoke CloseHandle,hSnapShot
push @stProcess.th32ProcessID
pop pid

GetID endp

这是部分代码,编译时提示.break .if @stProcess.szExeFile == szProcessName这句的错误
error A2070:

麻烦大牛给看下,先谢谢了!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
晕倒了,这是写汇编呢,你以为是写C啊,.if哪能直接比较内存中的字符串是否相等的……
MASM中的.if宏的功能是有限的,其实质就是cmp加上条件跳转,所以一条cmp语句没有办法支持的操作数,它也不支持,比如不能够双方都是内存数据。更不可能直接比较字符串内容了,你这一个高级语言里字符串之间的==算符,实际上变成汇编代码要多少你想过没……
汇编毕竟不是C这样的高级语言,.if宏虽然有,也不可能让你像使用高级语言的if语句那么使。
2009-12-2 00:19
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
3
这是字符串比较啊,晕倒了……
2009-12-2 00:20
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
lstrcmpi
2009-12-2 09:59
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢各位兄弟指教,尤其是LS的兄弟,我把程序做了修改,但编译后运行错误!

GetID proc

local        @stProcess:PROCESSENTRY32
invoke        RtlZeroMemory,addr @stProcess,sizeof @stProcess
mov @stProcess.dwSize,sizeof @stProcess
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
mov hSnapShot,eax
invoke Process32First,hSnapShot,addr @stProcess
.while eax
        invoke lstrcmpi,@stProcess.szExeFile,szIe
        .break .if eax == 0
        invoke Process32Next,hSnapShot,addr @stProcess
.endw
push @stProcess.th32ProcessID
pop pid
invoke CloseHandle,hSnapShot

GetID endp

我很郁闷!
2009-12-3 09:03
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
invoke lstrcmpi,@stProcess.szExeFile,szIe
lstrcmpi是传入地址的,你的是否是地址。
2009-12-3 10:02
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我查过了这个函数,lstrcmpi不是用来比较2个字符串的吗?
http://baike.baidu.com/view/1906887.htm?fr=ala0
2009-12-3 11:04
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
是的。但是他是指向字符串,其实就是指针,你把首地址传给他就行了。
你也可以看他在汇编里的参数是 lp开头的。这个说明是地址。你传地址。
2009-12-3 11:14
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢zerostudy 兄弟的大力帮助,问题已经解决了!
2009-12-3 11:42
0
游客
登录 | 注册 方可回帖
返回
//