| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1231 人关注过本帖, 1 人收藏
标题:DLL 进程枚举及进程路径~
只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏(1)
已结贴  问题点数:20 回复次数:4 
DLL 进程枚举及进程路径~
程序代码:
;练习:进程遍历 CreateToolhelp32Snapshot
;by onepc 153785587
; ml /c /coff Process.asm
; Link  /subsystem:windows /Dll /Def:Process.def Process.obj
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include psapi.inc
includelib user32.lib
includelib kernel32.lib
includelib psapi.lib

.data
szTitle db '进程枚举',0
szFmat db '进程ID:%u,进程名称:%s,进程路径:%s',0
.data?
hSanp dd ?   ;快照句柄
stSanp PROCESSENTRY32 <?>  ;快照的结构
szBuffer db 1024 dup (?)   
szExePath db MAX_PATH dup (?)  ;exe进程路径

.code

DLLEntry proc  _hInstance,_dwReason,_dwReserved ;_hInstance动态链接库的实例句柄
mov eax,TRUE ;
ret
DLLEntry endp

;内部使用
_GetExePath proc _ProcessId
            local @hProcess,@hModule,@dwsize            
 invoke OpenProcess,PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE,_ProcessId
 .if eax
   mov @hProcess,eax
   invoke EnumProcessModules,@hProcess,addr @hModule,Sizeof @hModule,@dwsize
   invoke GetModuleFileNameEx,@hProcess,@hModule,addr szExePath,Sizeof szExePath
 .endif
ret
_GetExePath endp

;导出函数
_ProcessList proc
mov stSanp.dwSize,sizeof stSanp  ;使用结构之前,要先设置大小
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,NULL ;得到当前的系统进程快照
mov hSanp,eax  ;快照句柄传给hSanp   Process32First
invoke Process32First,hSanp,addr stSanp   ;首次从快照得到一个进程信息
.while eax
invoke _GetExePath,stSanp.th32ProcessID
invoke wsprintf,addr szBuffer,addr szFmat,stSanp.th32ProcessID,addr stSanp.szExeFile,addr szExePath
invoke MessageBox,NULL,addr szBuffer,addr szTitle,0
invoke  Process32Next,hSanp,addr stSanp  ;用Process32Next循环从快照取得进程信息,直到取完进程,然后返回flase 从而退出
.endw
invoke CloseHandle,hSanp ;关闭快照句柄
ret
_ProcessList endp


End DLLEntry

Process.def
EXPORTS _ProcessList


Process.inc
_ProcessList proto


调用
程序代码:
.386
.model flat,stdcall
option casemap:none

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

include macro.asm  ;ctxt("")

.data

.data?
hInstance dd ?

.code

start:
invoke GetModuleHandle,NULL
mov hInstance,eax

invoke _ProcessList

invoke ExitProcess,NULL

end start


动态调用

程序代码:
.386
.model flat,stdcall
option casemap:none

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


include macro.asm  ;ctxt("")

_ProceDll typedef proto
ProceDll  typedef ptr _ProceDll
.data
szDllName db 'Process.dll',0
szProName db '_ProcessList',0

.data?
hInstance dd ?
hDllInstance dd ?
lpprocesslist ProceDll ? ;返回函数地址

.code

start:
invoke GetModuleHandle,NULL
mov hInstance,eax

invoke LoadLibrary,addr szDllName ;把dll文件映射到调用的进程的地址空间 这里即是把dll文件映射到dll.exe进程的地址空间中
 .if eax
   mov hDllInstance,eax ;成功返回模块句柄
   invoke GetProcAddress,hDllInstance,addr szProName ;这个是取模块里的函数的地址,要知道dll里的函数名
   .if eax
    mov lpprocesslist,eax
    invoke lpprocesslist ;这里的函数地址,用它就像用dll里的函数的用法一样
   .else
       invoke MessageBox,NULL,CTXT("取函数地址时出错"),CTXT("ERROR"),0
   .endif
 .else
   invoke MessageBox,NULL,CTXT("加载DLL文件出错"),CTXT("ERROR"),0

 .endif

.if hDllInstance
    invoke  FreeLibrary,hDllInstance
.endif



invoke ExitProcess,NULL

end start


[ 本帖最后由 onepc 于 2009-10-6 15:47 编辑 ]
收到的鲜花
  • zklhp2009-10-06 19:03 送鲜花  50朵   附言:我很赞同
搜索更多相关主题的帖子: 进程 DLL 路径 枚举 
2009-10-06 14:02
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
喔,写得不错

给点建议:

既然是库,最好少用点全局变量。不然以后牵涉到‘多线程’调用就麻烦了。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-06 18:59
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
谢谢版主加分,
及一条鱼兄的评价。。
嗯。正在学。多谢谢指教,。
一条鱼兄
有汇编的群么?
2009-10-06 20:23
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
回复 3楼 onepc
没有,孤零零的一条鱼(没有鱼的表情,只好用‘猪头’了

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-06 20:40
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用onepc在2009-10-6 20:23:21的发言:

谢谢版主加分,
及一条鱼兄的评价。。
嗯。正在学。多谢谢指教,。
一条鱼兄
有汇编的群么?

aogo网站上有汇编群~
2009-10-07 11:46
快速回复:DLL 进程枚举及进程路径~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018888 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved