Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Kennt jemand einen Weg, Resourcen einer EXE (Delphi-Compilat) per Programm zu patchen (so ähnlich wie es der ResorceWorkshop tut) wenn der Name dieser Rosourcen bekannt ist?<BR>
PMM
ab Windows NT steht die Win32-API-Funktion <b>UpdateResource</b> (mit den Helper-Funktionen BeginUpdateResource/EndUpdateResource) zur Verfügung, um die an die EXE angehängten Ressource-Daten zur Laufzeit aktualisieren zu können:
<pre>
var
h: THandle;
a: array [0..255] of Word;
begin
h:=BeginUpdateResource(PChar('Project1.exe'), False);
a := ....
UpdateResource(h, RT_RCDATA, 'JMP', 0, @a, SizeOf(a));
EndUpdateResource(h, False);
end;
Danke für den Tip. Es hat funktioniert.<BR>
Vielleicht noch ein paar Hinweise:<BR>
String-Resourcen werden in 16er Blöcken (Stringtable) zusammengefasst gespeichert. Die Nr (=Name) des Blocks, ist die Nr des Strings geteilt durch 16 plus 1. <BR>
Der Update misslingt, ohne das Fehler gemeldet werden!, wenn die betroffene Datei geöffnet ist (z.B. mit LoadLibrary um die zu patchende Stringtable auszulesen). <BR>
Im Jedi-Projekt gibt es ein umfangreichen Teil mit Code zum Umgang mit PE-Dateien (für meine Zwecke allerdings reichlich "oversized"), aus dem man sich einiges abschauen kann.<BR>
PM
Comment