📄 查找进程.asm
字号:
;根据程序名,查找进程id
;冰狐浪子作品代码节选
;include kernel32.inc
;includelib kernel32.lib
; 例:
; namePr db "EXPLORER.EXE",0
; ............
; invoke _findProcess,offset namePr
; .if eax
; 找到
; .else
; 没找到
; .endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;清零
_ZeroMemory proc _lpDest,_dwSize
push edi
cld
;push _lpDest
mov edi,_lpDest
mov ecx,_dwSize
xor eax,eax
rep stosb
;pop eax
pop edi
ret
_ZeroMemory endp
;计算字符串长度(带尾部的0)
_lstrlen proc _lpString
push edi
cld
mov edi,_lpString
mov ecx,-1
xor al,al
repnz scasb
mov eax,edi
sub eax,_lpString
pop edi
ret
_lstrlen endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;;查找进程id 参数:@ProcessName指向进程名的大写字符串地址
;;eax=返回的id(eax=0表示没找到)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_findProcess proc @ProcessName
local @StringLength ;@ProcessName指向的字符串长度
;用于获取进程
local @hSnapShot
local @stProcess:PROCESSENTRY32
;********************************************************************
; 计算传入 进程名 字符串的长度(带尾部的0)
;********************************************************************
invoke _lstrlen,@ProcessName
mov @StringLength,eax
invoke _ZeroMemory,addr @stProcess,sizeof @stProcess
mov @stProcess.dwSize,sizeof @stProcess
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
mov @hSnapShot,eax
invoke Process32First,@hSnapShot,addr @stProcess
.while eax
lea esi,@stProcess.szExeFile
push esi
mov edi,esi
;变为大写字母
_nextz:
lodsb
cmp al,60h
jc @F
cmp al,7Bh
ja @F
and al,not 20h
@@: STOSB
cmp al,"\"
jnz @F
pop ecx ;保存的esi出栈,无用
push esi
@@:
or al,al
jne _nextz
mov ecx,@StringLength ;字符串比较
pop esi
mov edi,@ProcessName
repz cmpsb
.if ZERO? ;找到了同名进程(ZF=1)
mov eax,@stProcess.th32ProcessID
jmp @F
.endif
invoke Process32Next,@hSnapShot,addr @stProcess
.endw
push eax
invoke CloseHandle,@hSnapShot
pop eax
@@: ret
_findProcess endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -