Announcement

Collapse
No announcement yet.

Recourcen patchen per Programm

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Recourcen patchen per Programm

    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

  • #2
    Hallo,

    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;

    </pre&gt

    Comment


    • #3
      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

      Working...
      X