
How can I find the DLL's (ALL Dll's not just windows) that a process has loaded and then get the memory address for it, anyone got any ideas / code?
Thanks
Pete.
Code: Select all
me32.MODULEENTRY32
me32\dwSize = SizeOf(MODULEENTRY32)
hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, hProcess) ;Change the zero for any processID.
If hSnapShot
If Module32First_(hSnapShot, me32)
Debug "Module name = "+PeekS(@me32\szModule) + " Filename = " + PeekS(@me32\szExePath) + " Base address = $" + Hex(me32\modBaseAddr, #PB_Integer)
Repeat
result = Module32Next_(hSnapShot, me32)
If result
debug "Module name = "+PeekS(@me32\szModule) + " Filename = " + PeekS(@me32\szExePath) + " Base address = $" + Hex(me32\modBaseAddr, #PB_Integer)
EndIf
Until result = #False
EndIf
CloseHandle_(hSnapShot)
Else
debug "Error CreateToolhelp32Snapshot_() failed!"
EndIf
Code: Select all
LibNumber.l = OpenLibrary(#PB_Any, "testlib.dll")
If LibNumber.l > 0
Code: Select all
Structure thread32
size.i
use.i
idth.i
parentid.i
base.i
delta.i
flags.i
EndStructure
#MAX_MODULE_NAME32=255
#MAX_MODULE_NAME32plus=#MAX_MODULE_NAME32+1
#TH32CS_SNAPPROCESS=$2
#TH32CS_SNAPMODULE=$8
Procedure.s RetrieveModuleBase(ProcName.s, ModuleName.s)
lReturnID.i
hSnapProcess.i
hSnapModule.i
procx.PROCESSENTRY32
Module.MODULEENTRY32
OpenLibrary(0, "kernel32.dll")
hSnapProcess=CallFunction(0, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0)
If hSnapProcess <> 0
procx\dwSize = SizeOf(procx)
lReturnID = CallFunction(0, "Process32First", hSnapProcess, @procx)
While lReturnID<>0
If FindString(Left(PeekS(@procx\szExeFile), Len(ProcName)), ProcName, 1)=1
hSnapModule = CallFunction(0, "CreateToolhelp32Snapshot", #TH32CS_SNAPMODULE, procx\th32ProcessID)
If hSnapModule
Module\dwSize = SizeOf(Module)
lReturnID = CallFunction(0, "Module32First", hSnapModule, @Module)
While lReturnID<>0
If FindString(Left(PeekS(@Module\szModule), Len(ModuleName)), ModuleName, 1)=1
CloseLibrary(0)
ProcedureReturn "$"+Hex(Module\modBaseAddr)
EndIf
lReturnID = CallFunction(0, "Module32Next", hSnapModule, @Module)
Wend
EndIf
EndIf
lReturnID = CallFunction(0, "Process32Next", hSnapProcess, @procx)
Wend
EndIf
CloseLibrary(0)
ProcedureReturn "0"
EndProcedure
; example usage
Debug RetrieveModuleBase("notepad.exe", "kernel32.dll")
; returns the base address