Hallo,
der Betreff ist eventuell etwas irreführend aber ich brauche Hilfe bei Folgendem:
Erst einmal habe ich diese Funktionen bereits in einem Modul:
<DllImport("kernel32.dll")> _
Public Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal _
lpBaseAddress As IntPtr, <[In](), Out()> ByVal buffer As Byte(), ByVal size _
As UInt32, ByRef lpNumberOfBytesRead As IntPtr) As Int32
End Function
<DllImport("kernel32.dll")> _
Public Function WriteProcessMemory(ByVal hProcess As IntPtr, ByVal _
lpBaseAddress As IntPtr, <[In](), Out()> ByVal buffer As Byte(), ByVal size _
As UInt32, ByRef lpNumberOfBytesWritten As IntPtr) As Int32
End Function
Public Function WriteInt32(ByVal P As Process, ByVal memAdr As Int32, ByVal _
value As Integer) As Boolean
Return WriteBytes(P, memAdr, BitConverter.GetBytes(value), 4)
End Function
Public Function ReadInt32(ByVal P As Process, ByVal memAdr As Int32) As _
Integer
Return BitConverter.ToInt32(ReadBytes(P, memAdr, 4), 0)
End Function
Public Function ReadBytes(ByVal P As Process, ByVal memAdr As Long, ByVal _
bytesToRead As UInteger) As Byte()
Dim ptrBytesRead As IntPtr
Dim buffer As Byte() = New Byte(CInt(bytesToRead - 1)) {}
ReadProcessMemory(P.Handle, New IntPtr(memAdr), buffer, bytesToRead, _
ptrBytesRead)
Return buffer
End Function
Private Function WriteBytes(ByVal P As Process, ByVal memAdr As Long, ByVal _
bytes As Byte(), ByVal length As UInteger) As Boolean
Dim bytesWritten As IntPtr
Dim result As Integer = WriteProcessMemory(P.Handle, New IntPtr( _
memAdr), bytes, length, bytesWritten)
Return result <> 0
End Function Wenn ich nun per Pointer den Wert einer Addresse im RAM verändern will muss ich umständlicherweise z.B. schreiben:
Dim Adr1 As Int32 = Memory.ReadInt32(p, ADRESSE)
Adr1 = Memory.ReadInt32(p, Adr1 + OFFSET1)
Adr1 = Memory.ReadInt32(p, Adr1 + OFFSET2)
WriteInt32(p, Adr1 + OFFSET3, WERT) Ich hätte nun gerne eine Funktion, bei der es reicht, die Adresse + Offsets anzugeben, anstatt alles in 4 Zeilen Code einzeln durchzuführen. Ich habe aber Probleme dabei, da die Anzahl der Offsets ja von Pointer zu Pointer verschieden sein kann.
Die Funktion sollte später also ungefähr so funktionieren:
WriteIntPointer(p, Addresse, Offset1, Offset2, Offset3, Wert) Kann mir da jemand helfen? |