Ich würde sagen das ist in allen formaten so, auch bei PE und ELF.
Ahemm... Erstens: das hat nix mit Formaten von ausführbaren Dateien zu tun, sondern mit der Speicherverwaltung deines Betriebssystems/der VM, und zweitens: man kann rein theoretisch Änderungen am Code-Segment einschleusen (unter Linux), und zwar:
ELF-Files werden manchmal ge-mmaped, sprich das Codesegement wird mittels der Virtuellen Speicherverwaltung (die eben auch den Swap verwaltet) in den Hauptspeicher von der physikalischen Position auf der Platte gemapped, genauso wie das mit dem Swap-Speicher passiert.
Da das Code-Segment nicht schreibbar ist kannst Du aus dem Programm keine Veränderungen an dem Code-Segment vornehmen die sich auf der Platte wiederspiegeln (es wird also nicht zurückgeswapped), aber wenn Du auf der Platte das Code-Segment veränderst, das Code-Segment (besser gesagt einen Teil, nämlich eine Page, davon) ausswappen lässt (die eben nicht in den Swap muß da sie unverändert auf Platte liegt, was der große Vorteil von dieser Art des Mappings von ausführbaren Dateien in den Hauptspeicher ist), und es dann wieder kurz darauf in den Speicher holst (was das Virtual Memory Management alles für Dich macht) hast Du den Effekt dass sich das Image geändert hat.
Soweit ich weiß blockieren EXT2 und EXT3 (die einzigen Dateisysteme die dieses mmapping von executables unterstützen, auch wieder soweit ich weiß) Änderungen an der ausführbaren Datei (sprich an dem Inhalt ihres Inodes) wenn sie gemapped ist, aber im Prinzip ist es möglich Code so einzuschleusen. Aber auch hier wird der Code sozusagen "neu" geladen.
--- Heiko.