首页
社区
课程
招聘
救我啊,用汇编写的进程管理(有代码)
发表于: 2005-1-28 14:20 5050

救我啊,用汇编写的进程管理(有代码)

2005-1-28 14:20
5050
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

include dll.inc       ;;;;;;;安装钩子的dll
includelib dll.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

DlgFunc PROTO :DWORD,:DWORD,:DWORD,:DWORD
Strstr proto :DWORD,:DWORD      ;一个字符串搜索函数,没贴出来
FindId proto               ;寻找explorer.exe的进程句柄
                                   ;我只会这样找,,,不知道是否有更好的办法
                                   ;有的话一定要告诉我啊
.const
IDD_MAINDLG equ 101

.data
HookFlag dd FALSE
exeName db "EXPLORER.EXE",0

ppe PROCESSENTRY32 <>         

hHandle dd 0

.data?

hId dd ?                    ;the id of exporer.exe
hInstance dd ?  

hHook dd ?      

.code
start:
     invoke GetModuleHandle,NULL
     
     mov hInstance,eax
   
     call FindId
    .if eax == 0
    jmp err
    .endif
                              
invoke DialogBoxParam,hInstance,IDD_MAINDLG,NULL,addr DlgFunc,NULL

err:
   
    invoke ExitProcess,NULL

;############################################
   
DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

    .if uMsg==WM_CLOSE
        .if HookFlag==TRUE
            invoke UninstallHook
        .endif
        invoke EndDialog,hDlg,NULL
        
    .elseif uMsg==WM_INITDIALOG
   
        .if HookFlag == FALSE
            invoke InstallHook,hId,hDlg
        ;安装钩子的函数在dll中,hId是explorer.exe的进程id            
            .if eax != FALSE
                mov HookFlag,TRUE
            .endif
        .endif   
            
    .endif
    ret

DlgFunc endp

FindId proc
   
   
    invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
   
    mov hHandle,eax
    ;问题就出在这了,我用soft-ice看,process32first老返回0

    invoke Process32First,eax,addr ppe
   
;;;;;;;下面是一个循环
    loop9:
   
       .if eax == 0
           jmp loop8
       .endif

       invoke Strstr,addr exeName,addr ppe.szExeFile
        ;在找到的进程路径中搜索 字符串 "EPLORER.EXE"  找到 返回1

       .if eax ==1
                   ;把exploer.exe的进程Id保存起来,并返回
        mov eax,ppe.th32ProcessID
        mov hId,eax
           ret
       .endif
       invoke Process32Next,hHandle,addr ppe   
       jmp loop9
    loop8:

    mov eax,0
    ret

FindId endp
end start

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
问题是啥?怎么救你?
2005-1-28 14:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
高人们,,救我啊,,,我都弄了2天了,,,苦也
2005-1-28 14:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
为什么process32first   返回0?
谢谢啊....
2005-1-28 15:00
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
5
ppe.dwSize = sizeof(PROCESSENTRY32);
//ppe.dwSize must be filled out before use

加上这句看看?
2005-1-28 20:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢~~~~~~~~
2005-1-29 23:02
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
7
感谢就不必了, 基本功要学好.
2005-1-30 10:22
0
游客
登录 | 注册 方可回帖
返回
//