Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Der Compilier Schlater {$IMAGEBASE $XXXXXXXX}

  Alt 7. Jul 2005, 20:30
Imagebase gibt die Adresse an im Adressraum des Prozesses an, an die ein Image geladen wird. Normal ist $00400000. Auf diese Adresse sind alle Sprünge berechnet im Code. So, wenn jetzt eine DLL geladen wird und diese hat auch als Imagebase die Adresse $00400000 geht das natürlich nicht und sie wird an eine höhere Adresse geladen. Jetzt wurde sie aber mit der Imagebase Adresse $00400000 kompiliert, ergo stimmen die Adressen nicht mehr und müssen von Windows mit Hilfe des Reallocationtables in dem Modul neu berechnet werden. jetzt könnte man, wenn man eine DLL für sein prgramm schreibt die Imagebase Adresse auf einen anderen Wert setzen, macht man aber eigentlich nicht, weil man ja nicht weiß, ob nicht schon Windows an diese geänderte Adresse eine DLL geladen hat und dann müssten die Adressen im Modul doch wieder neu berechnet werden. Hak es unter "gut zu wissen" ab und kümmer dich nicht weiter drum.

Nachtrag, den Reallocatiotable kann man theoretisch aus einer Exe entfernen und so die Größe der Exe verringern. Aus DLL sollte man es aus obigen Gründen nicht tun, da dann Windows die Sprungadresse in der DLL nicht neu berechnen kann, wenn sie an eine andere Adresse geladen wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat