Ok hab mir jetz ne Funktion geschrieben fürs auslesen der Mapped File.
Und zum Filtern der Regionen nutz ich VirtualQuery.
Wenns euch Interessiert.
PHP Code:
#include <Winapi.au3>
#include <array.au3>
$pid = ProcessExists("Engine.exe")
$Base = 0x00000010
$Size = 0x0
Global $Addresses[1500][2]
For $i = 1 To 1499
If $Base > 0x7ffe0001 Then
$Addresses[0][0] = $i-1
ExitLoop
EndIf
$Region = _ProcessMemoryVirtualQuery($pid,$Base+$Size)
if IsArray($Region) Then
$Base = $Region[0]
$Size = "0x"&Hex($Region[3])
$Addresses[$i][0] = $Region[0]
$Addresses[$i][1] = GetMappedFileName($pid,$Region[0])
EndIf
Next
_ArrayDisplay($Addresses)
Func GetMappedFileName($PID, $Address)
Local Const $PROCESS_QUERY_INFORMATION=0x0400
Local Const $PROCESS_VM_READ=0x0010
Local $hprocess
$Psapi = DllOpen("Psapi.dll")
$hProcess=_WinAPI_OpenProcess(BitOR($PROCESS_QUERY_INFORMATION,$PROCESS_VM_READ),False,$PID)
If Not $hProcess Then Return 0
$Filename = DllStructCreate("char[255]")
DllCall($Psapi, "DWORD", "GetMappedFileNameA", "ptr", $hProcess, "DWORD", $Address, "ptr", DllStructGetPtr($Filename), "DWORD", 255)
_WinAPI_CloseHandle($hProcess)
DllClose($Psapi)
Return DllStructGetData($Filename, 1)
EndFunc
Func _ProcessMemoryVirtualQuery($PID,$pAddress,$iInfo=-1)
$_COMMON_KERNEL32DLL = DllOpen("Kernel32.dll")
Local $hProcess = _WinAPI_OpenProcess(0x400,False,$PID)
If Not IsPtr($hProcess) Or Ptr($pAddress)=0 Or $iInfo>6 Then Return SetError(1,0,-1)
Local $aRet,$stMemInfo=DllStructCreate("ptr;ptr;dword;ulong_ptr;dword;dword;dword"),$iStrSz=DllStructGetSize($stMemInfo)
$aRet=DllCall($_COMMON_KERNEL32DLL,"ulong_ptr","VirtualQueryEx","handle",$hProcess,"ptr",$pAddress,"ptr",DllStructGetPtr($stMemInfo),"ulong_ptr",$iStrSz)
If $iInfo<0 Then
Dim $aMemInfo[7]
For $i=0 To 6
$aMemInfo[$i]=DllStructGetData($stMemInfo,$i+1)
Next
Return $aMemInfo
EndIf
Return DllStructGetData($stMemInfo,$iInfo+1)
EndFunc