Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.490 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: RTL Fehler beheben - System.pas

  Alt 28. Jul 2023, 22:33
Das hört sich interessant an, wie genau funktioniert das? Wie kann ich mich da dazwischen hängen?
1. Adressen der alten und neuen Funktion referenzieren (z.b. @System._writestring, @MyUnit.MyWriteString)
2. offset ermitteln (Integer(@MyUnit.MyWriteString) - Integer(@System._writestring) - 5). Die 5 sind der JMP Befehl sowie die vier Byte des Pointers.
3. $E9 + (offset and 255) + ((offset shr 8) and 255) + ((offset shr 16)) and 255 + ((offset shr 24) and 255) bilden. Das ergibt dann ein JMP rel32 auf die neue Funktionsadresse
4. Diese Bytefolge an die Adresse der alten Funktion setzen (move)

Den Aufruf in die initialization setzen, oder wenn das zu spät ist eine statische Klasse erstellen die das im class constructor macht.

Siehe auch https://c9x.me/x86/html/file_module_x86_id_147.html
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all

Geändert von Union (28. Jul 2023 um 22:35 Uhr)
  Mit Zitat antworten Zitat