Einen wunderschönen Guten Abend hier im Forum.
Eins vorweg, die Suchfunktion hab ich bereits benutzt, hilft mir aber in meiner Form der Problemlösung nicht weiter.
Noch etwas zur Erklärung...
Bisher schreibe ich in den Speicher fremder Prozesse, natürlich, mittels WriteProcessMemory. In diesem Sinne handelt sich es quasi um statische Adressen die beschrieben werden.
Mittlerweile hab ich mich mal über die VirtualProtectEx Funktion her gemacht und versuche das Ganze so zu lösen, also das Schreiben in einen Prozess.
Folgendes Problem besteht jetzt meinerseits. Die Funktion liefert mir ja nur den Pointer auf die Anfangsadresse des Speicherbereichs den ich mir mit dieser API zuweise. Im nachfolgenden seht ihr den Codeabschnitt...
Delphi-Quelltext
1: 2: 3: 4: 5:
| var BaseAdress: PByte; begin BaseAdress:= VirtualAllocEx (hProcess, nil, dwSize, flNewProtect, lpflOldProtect); WriteProcessMemory(hProcess, Pointer(BaseAdress), lpBuffer, nSize, lpNumberOfBytesWritten); |
Problemlos kann ich so z.B. auch an einer bestimmten Stelle innerhalb des zugewiesenen Speichers schreiben. So wie hier zu sehen...
Delphi-Quelltext
1:
| WriteProcessMemory(hProcess, Pointer(BaseAdress+$500), lpBuffer, nSize, lpNumberOfBytesWritten); |
Soweit alles kein Problem. Konkret dreht es sich nun um folgendes... Ich möchte z.B. nach den geschriebenen Daten, die als Array deklariert sind, einen Sprungbefehl schreiben. Die Berechnung des Sprunges bzw. der Sprungweite ist soweit kein Problem, aber da mir VirtualProtectEx nur den Pointer liefert kann ich jetzt z.B. nicht einfach rechnen...
Quelltext
1:
| Sprung ZU Adresse - Sprung VON Adresse - 5 (Opcodes der Sprungweite) |
Ich müsste also erst einmal den Pointer in eine Integer Variable umwandeln. Aber da stoße ich irgendwie auf Granit.
Wäre schön wenn mir jemand in dieser Richtung nen Tipp geben könnte das zu lösen.
Ansonsten wünsche ich noch einen schönen Abend
MFG Don Krawallo