/BASE
(Basisadresse)
Gibt die Basisadresse für ein Programm an.
Syntax
/BASE:
{address
[,
size
] |@
filename
,
key
}
Hinweise
Hinweis
Aus Sicherheitsgründen empfiehlt Microsoft, die /DYNAMICBASE
Option zu verwenden, anstatt Basisadressen für Ihre ausführbaren Dateien anzugeben. /DYNAMICBASE
generiert ein ausführbares Bild, das zur Ladezeit zufällig neu erstellt werden kann, indem das AsLR-Feature (Address Space Layout Randomization) von Windows verwendet wird. Die /DYNAMICBASE
Option ist standardmäßig aktiviert.
Die /BASE
Linkeroption legt eine Basisadresse für das Programm fest. Er überschreibt den Standardspeicherort für eine EXE- oder DLL-Datei. Die Standardbasisadresse für eine EXE-Datei ist 0x400000 für 32-Bit-Bilder oder 0x140000000 für 64-Bit-Bilder. Bei einer DLL wird die Standardbasisadresse für 32-Bit-Images oder 0x180000000 für 64-Bit-Bilder 0x10000000. Bei Betriebssystemen, die die Randomisierung des Adressraumlayouts (Address Space Randomization, ASLR) nicht unterstützen oder wenn die /DYNAMICBASE:NO
Option festgelegt wurde, versucht das Betriebssystem zunächst, ein Programm an seiner angegebenen oder Standardbasisadresse zu laden. Wenn dort nicht genügend Speicherplatz verfügbar ist, verschlegt das System das Programm. Um eine Verlagerung zu verhindern, verwenden Sie die /FIXED
Option.
Der Linker gibt einen Fehler aus, wenn address
es sich nicht um ein Vielfaches von 64 KB handelt. Optional können Sie die Größe des Programms angeben. Der Linker gibt eine Warnung aus, wenn das Programm nicht in die von Ihnen angegebene Größe passen kann.
In der Befehlszeile wird eine andere Möglichkeit zum Angeben der Basisadresse mithilfe einer Basisadressenantwortdatei verwendet. Eine Basisadressenantwortdatei ist eine Textdatei, die die Basisadressen und optionale Größen aller von Ihrem Programm benötigten DLLs und einen eindeutigen Textschlüssel für jede Basisadresse enthält. Wenn Sie eine Basisadresse mithilfe einer Antwortdatei angeben möchten, verwenden Sie ein At-Zeichen (@
) gefolgt vom Namen der Antwortdatei, filename
gefolgt von einem Komma, und dann den key
Wert für die Basisadresse, die in der Datei verwendet werden soll. Der Linker sucht filename
entweder im angegebenen Pfad oder wenn kein Pfad angegeben ist, in den Verzeichnissen, die in der LIB
Umgebungsvariable angegeben sind. Jede Zeile in filename
stellt eine DLL dar und weist die folgende Syntax auf:
key
address
[size
];
comment
Dies key
ist eine Zeichenfolge mit alphanumerischen Zeichen und berücksichtigt nicht die Groß-/Kleinschreibung. Normalerweise ist es der Name einer DLL, aber das ist nicht erforderlich. Gefolgt key
von einer Basis address
in C-Sprache, hexadezimaler oder dezimaler Schreibweise und einem optionalen Maximum size
. Alle drei Argumente werden durch Leerzeichen oder Tabstopps getrennt. Der Linker gibt eine Warnung aus, wenn der angegebene size
Platz kleiner als der virtuelle Adressraum ist, der vom Programm benötigt wird. A comment
wird durch ein Semikolon (;
) angegeben und kann sich auf derselben oder einer separaten Zeile befinden. Der Linker ignoriert den gesamten Text vom Semikolon bis zum Ende der Zeile. Dieses Beispiel zeigt einen Teil einer solchen Datei:
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
Wenn die Datei, die diese Zeilen enthält, DLLS.txt aufgerufen wird, wendet der folgende Beispielbefehl diese Informationen an:
link dlltwo.obj /dll /base:@dlls.txt,two
Eine weitere Möglichkeit zum Festlegen der Basisadresse ist die Verwendung des BASE
Arguments in einer NAME
oder LIBRARY
Anweisung. Die /BASE
zugehörigen Optionen entsprechen /DLL
der LIBRARY
Anweisung.
So legen Sie diese Linkeroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).
Wählen Sie die Seite "Konfigurationseigenschaften linker>>Advanced".
Ändern Sie die Base Address-Eigenschaft .
So legen Sie diese Linkeroption programmgesteuert fest
- Siehe BaseAddress.