找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7138|回复: 4

[系统工具] 【开源】马大哈系列功能模块-----列举进程模块(VB6.0)

[复制链接]

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-2-22 23:06:32 | 显示全部楼层 |阅读模式
ModGetMod.bas (6.07 KB, 下载次数: 24621)
  1. Public Function TestFun()
  2.     '测试过程.在立即窗口里执行本过程即可看到效果.K()返回的是每个模块的句柄.
  3.     Dim I() As String, J As Long, K() As Long
  4.    
  5.     Call EnumModule("explorer.exe", I, K())
  6.     For J = 0 To UBound(I)
  7.         Debug.Print I(J),"hModule=" & k(I)
  8.     Next
  9. End Function
复制代码
本模块可列出指定进程内的模块,需要与ModFindProcess.bas配合,下载地址:

马大哈系列功能模块----查找/结束进程
我就是嗷嗷叫的老马了......

0

主题

13

回帖

0

精华

铜牌会员

积分
137
发表于 2015-1-11 14:34:38 | 显示全部楼层
本帖最后由 tbage 于 2015-1-12 16:05 编辑

http://www.m5home.com/bbs/thread-7462-1-1.html
UnloadModule
的第二个参数,为模块名的时候"xxxx.dll"的时候,If sMod(i) = ModNameOrModHandle Then中sMod(i)下标越界,

试着将第二个参数转换为xxxx.dll的基址,得到的返回值为900,可xxxx.dll依然在PID里...


怎么能获取其他进程的xxxx.dll模块的句柄啊。。。。不知道咋弄了....{:soso_e109:}

0

主题

13

回帖

0

精华

铜牌会员

积分
137
发表于 2015-1-11 14:37:59 | 显示全部楼层
这是在网上找得一个取模块基址的模块......

  1. Attribute VB_Name = "得到模块基址"
  2. 'Text1 = GetModuleAdd(5788, "xxxx.dll")
  3. '要>0就是正常加载了.



  4. Option Explicit
  5. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
  6. Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  7. Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  8. Private Declare Function Module32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long
  9. Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long
  10. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  11. Private Declare Function NtUnmapViewOfSection Lib "NTDLL.dll" (ByVal ProcessHandle As Long, ByVal BaseAddress As Long) As Long
  12. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  13. Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
  14. Private Type PROCESSENTRY32
  15.     dwSize  As Long
  16.     cntUseage  As Long
  17.     th32ProcessID  As Long
  18.     th32DefaultHeapID  As Long
  19.     th32ModuleID  As Long
  20.     cntThreads  As Long
  21.     th32ParentProcessID  As Long
  22.     pcPriClassBase  As Long
  23.     swFlags  As Long
  24.     szExeFile  As String * 1024
  25. End Type
  26. Private Type MODULEENTRY32
  27.     dwSize As Long
  28.     th32ModuleID As Long
  29.     th32ProcessID As Long
  30.     GlblcntUsage As Long
  31.     ProccntUsage As Long
  32.     modBaseAddr As Long
  33.     modBaseSize As Long
  34.     hModule As Long
  35.     szModule As String * 256
  36.     szExePath As String * 1024
  37.     End Type
  38.     Public Type THREADENTRY32
  39.     dwSize As Long
  40.     cntusage As Long
  41.     th32threadID As Long
  42.     th32OwnerProcessID As Long
  43.     tpBasePri As Long
  44.     tpDeltaPri As Long
  45.     dwFlags As Long
  46. End Type
  47. Private Const TH32CS_SNAPPROCESS = &H2
  48. Private Const TH32CS_SNAPmodule = &H8
  49. Public Function GetModuleAdd(PID As Long, ModuleName As String) As Long
  50. Dim pr As PROCESSENTRY32
  51. Dim lp As Long
  52. Dim mo As MODULEENTRY32
  53. Dim LM As Long
  54. Dim i As Long
  55. Dim Temp As Variant
  56. If ModuleName = "" Then GetModuleAdd = 0: Exit Function
  57.     pr.dwSize = Len(pr)
  58.         LM = CreateToolhelp32Snapshot(TH32CS_SNAPmodule, PID)
  59.         If LM > 0 Then
  60.             mo.dwSize = Len(mo)
  61.             If Module32First(LM, mo) Then
  62.                 Do
  63.                     Temp = Left(mo.szExePath, InStr(mo.szExePath, Chr(0)) - 1)
  64.                     Temp = Mid(Temp, InStrRev(Temp, "") + 1)
  65.                     If UCase(Temp) = UCase(ModuleName) Then
  66.                         GetModuleAdd = mo.modBaseAddr
  67.                         Exit Function
  68.                     End If
  69.                     i = i + 1
  70.                 Loop Until Module32Next(LM, mo) = 0
  71.             End If
  72.                 CloseHandle (LM)
  73.             End If
  74. End Function


复制代码

0

主题

68

回帖

0

精华

铜牌会员

积分
94
发表于 2015-1-12 08:58:24 | 显示全部楼层
谢谢分享

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-4-18 08:59:10 | 显示全部楼层
必须支持!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表