Was ist die ImagebaseAddress?


Die Imagebase ist die Adresse unter der Windows Module lädt. Der standard Imagebase ist $00400000, welches die standard Imagebase unter Windows ist. Windows muss jedes Modul an eine eindeutige Adresse laden. Windows versucht das Modul an die im Modul angegeben Imagebase Adresse zu laden, aber wenn dies nicht möglich ist, weil dort schon ein Modul geladen wurde, muss Windows das Modul an eine andere Adresse laden und die Sprungadressen im Code neu berechnen. Dies verzögert das Laden des Moduls.

Delphi Module bekommen die Adresse $00400000 (Laut den Delphi Projektoptionen, laut "Delphi in an Nutshell" beginnen Delphi Module an der Adresse $40000000. Microsoft Systemmodule beginnen an der Adresse $70000000 (Laut "Delphi in a Nutshell".). Es gibt keine Standards für Module von Drittanbietern.

Um die Sprungadressen neu berechnen zu können, benutzt Windows den Reallocationtable am Anfang jedes Moduls. Da Exe-Dateien nicht an eine andere Adresse geladen werden müssen, da sie immer vor den DLLs geladen werden, kann es zu keinem Konflikt kommen, deshalb kann man ihn eigentlich entfernen und kann so die Größe der Exe-Datei reduzieren. Meist lohnt es aber nicht, da der Reallocationtable in der Regel nicht sehr groß ist. Auf dieser Seite [1]kann man sich ein Delphi Programm (mit Source) runterladen, um den Reallocationtable zu entfernen. Aus DLLs sollte man ihn möglichst nicht entfernen, da es bei DLLs passieren kann, dass sie nicht an die Imagebase Adresse geladen werden können, weil dort schon ein Modul geladen wurde und deshalb den Reallocationtable benötigen, damit Windows die Sprungadressen neu berechnen kann.

Links

[1] http://www.jrsoftware.org/striprlc.php

2010-12-29T23:44:49 +0100, mail+homepage[at]michael-puff.de