Das ist auch der Grund warum die Memory-UDFs immer als 1. Index im PointerOffset-Array eine 0 haben wollen.
Es wird eine einfache For-Schleife verwendet und es wird an baseaddress + offset[0] (dieser ist ja 0) gelesen und dann wird das Ergebnis genommen
und im nächsten Schleifendurchlauf wird an der stelle ergebnis + offset[1] gelesen und immer so weiter.
So in etwa?
AutoIt
#AutoIt3Wrapper_UseX64=y
#RequireAdmin
#include <ProcessConstants.au3>
#include <WinAPI.au3>
Dim $aiOffsets[6]
$aiOffsets[0] = 0x0
$aiOffsets[1] = 0x18
$aiOffsets[2] = 0x20
$aiOffsets[3] = 0x28
$aiOffsets[4] = 0x10
$aiOffsets[5] = 0x20
Local $iPid = ProcessExists("LCore.exe")
Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, True, $iPid)
Local $iBase = 0x007FF73117D9C8
Local $tNewStruct = DllStructCreate("INT_PTR")
Local $pNewStruct = DllStructGetPtr($tNewStruct)
Local $iRead = 0
For $i=0 to 5
_WinAPI_ReadProcessMemory($hProcess, $iBase, $pNewStruct, DllStructGetSize($tNewStruct), $iRead)
$ergebnis=DllStructGetData($tNewStruct, 1)
MsgBox(0, "Ausgelesene Adresse", hex($ergebnis))
$iBase='0x' & Hex($ergebnis+$aiOffsets[$i])
MsgBox(0, "Neue Adresse", $iBase)
Next
Alles anzeigen
Konnte ich noch nicht testen bin gerade unterwegs.