/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, filenamegefolgt 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:

keyaddress [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 genannt 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

  1. Ö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).

  2. Wählen Sie die Seite "Konfigurationseigenschaften linker>>Advanced".

  3. Ändern Sie die Base Address-Eigenschaft .

So legen Sie diese Linkeroption programmgesteuert fest

Siehe auch

MSVC-Linkerreferenz
Linkeroptionen