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.