dann liest du per ReadProcessMemory die adresse auf die der pointer zeigt ein, und schreibst dann, per WriteProcessMemory in die eingelesen Adresse deinen neuen wert
unter der annahme, das der pointer direkt auf deinen wert zeigt, könnte das ganze zb so aussehen:
Code:
Func PointerWrite($pid, $pointer, $neuer_wert, $typ)
;DLL Öffnen
Local $kernel32 = DllOpen('kernel32.dll')
;Prozess öffnen (mit full access)
Local $process = DllCall($kernel32, 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $pid)
;DllStruct für unsere einzulesende adresse erstellen (DWORD)
Local $read_struct = DllStructCreate('dword')
;adresse in struct speichern
DllCall($kernel32, 'int', 'ReadProcessMemory', 'int', $process[0], 'int', $pointer, 'ptr', DllStructGetPtr($read_struct), 'int', DllStructGetSize($read_struct), 'int', '')
;neue DllStrcut für den zu schreibeneden wert erstellen
Local $write_struct = DllStructCreate($typ)
;zu schreibenden wert in DllStrcut speichern
DllStructSetData($write_struct, $neuer_wert, 1)
;der eingelesenen adresse volle zugriffsrechte geben
Local $original = DllCall($kernel32, 'int', 'VirtualProtectEx', 'int', $process[0], 'ptr', DllStructGetData($read_struct, 1), 'int', DllStructGetSize($write_struct), 'dword', 0x40, 'dword*', 0)
;neuen wert in eingelesene adresse speichern
DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $process[0], 'int', DllStructGetData($read_struct, 1), 'ptr', DllStructGetPtr($write_struct), 'int', DllStructGetSize($write_struct), 'int', 0)
;ursprüngliche rechte wieder herstellen
DllCall($kernel32, 'int', 'VirtualProtectEx', 'int', $process[0], 'ptr', DllStructGetData($read_struct, 1), 'int', DllStructGetSize($write_struct), 'dword', $original[5], 'dword*', 0)
;geöffneten prozess schließen
DllCall($kernel32, 'int', 'CloseHandle', 'int', $process[0])
;geöffnete DLL schließen
DllClose($kernel32)
EndFunc