|
发表于 2015-1-11 14:37:59
|
显示全部楼层
这是在网上找得一个取模块基址的模块......
- Attribute VB_Name = "得到模块基址"
- 'Text1 = GetModuleAdd(5788, "xxxx.dll")
- '要>0就是正常加载了.
- Option Explicit
- Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
- Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
- Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
- Private Declare Function Module32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long
- Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long
- Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
- Private Declare Function NtUnmapViewOfSection Lib "NTDLL.dll" (ByVal ProcessHandle As Long, ByVal BaseAddress As Long) As Long
- Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
- Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
- Private Type PROCESSENTRY32
- dwSize As Long
- cntUseage As Long
- th32ProcessID As Long
- th32DefaultHeapID As Long
- th32ModuleID As Long
- cntThreads As Long
- th32ParentProcessID As Long
- pcPriClassBase As Long
- swFlags As Long
- szExeFile As String * 1024
- End Type
- Private Type MODULEENTRY32
- dwSize As Long
- th32ModuleID As Long
- th32ProcessID As Long
- GlblcntUsage As Long
- ProccntUsage As Long
- modBaseAddr As Long
- modBaseSize As Long
- hModule As Long
- szModule As String * 256
- szExePath As String * 1024
- End Type
- Public Type THREADENTRY32
- dwSize As Long
- cntusage As Long
- th32threadID As Long
- th32OwnerProcessID As Long
- tpBasePri As Long
- tpDeltaPri As Long
- dwFlags As Long
- End Type
- Private Const TH32CS_SNAPPROCESS = &H2
- Private Const TH32CS_SNAPmodule = &H8
- Public Function GetModuleAdd(PID As Long, ModuleName As String) As Long
- Dim pr As PROCESSENTRY32
- Dim lp As Long
- Dim mo As MODULEENTRY32
- Dim LM As Long
- Dim i As Long
- Dim Temp As Variant
- If ModuleName = "" Then GetModuleAdd = 0: Exit Function
- pr.dwSize = Len(pr)
- LM = CreateToolhelp32Snapshot(TH32CS_SNAPmodule, PID)
- If LM > 0 Then
- mo.dwSize = Len(mo)
- If Module32First(LM, mo) Then
- Do
- Temp = Left(mo.szExePath, InStr(mo.szExePath, Chr(0)) - 1)
- Temp = Mid(Temp, InStrRev(Temp, "") + 1)
- If UCase(Temp) = UCase(ModuleName) Then
- GetModuleAdd = mo.modBaseAddr
- Exit Function
- End If
- i = i + 1
- Loop Until Module32Next(LM, mo) = 0
- End If
- CloseHandle (LM)
- End If
- End Function
复制代码 |
|