Condividi tramite


/BASE (Indirizzo di base)

Specifica l'indirizzo di base per un programma.

Sintassi

/BASE:{address[,size] | @filename,key}

Osservazioni:

Nota

Per motivi di sicurezza, Microsoft consiglia di usare l'opzione /DYNAMICBASE anziché specificare gli indirizzi di base per i file eseguibili. /DYNAMICBASE genera un'immagine eseguibile che può essere ribasata in modo casuale in fase di caricamento usando la funzionalità asLR (Address Space Layout Randomization) di Windows. L'opzione /DYNAMICBASE è attivata per impostazione predefinita.

L'opzione /BASE del linker imposta un indirizzo di base per il programma. Esegue l'override del percorso predefinito per un file EXE o DLL. L'indirizzo di base predefinito per un file EXE è 0x400000 per immagini a 32 bit o 0x140000000 per le immagini a 64 bit. Per una DLL, l'indirizzo di base predefinito è 0x10000000 per immagini a 32 bit o 0x180000000 per le immagini a 64 bit. Nei sistemi operativi che non supportano la randomizzazione casuale dello spazio degli indirizzi (ASLR) o quando è stata impostata l'opzione /DYNAMICBASE:NO , il sistema operativo tenta innanzitutto di caricare un programma in corrispondenza dell'indirizzo di base specificato o predefinito. Se lo spazio disponibile non è sufficiente, il sistema riloca il programma. Per evitare la rilocazione, usare l'opzione /FIXED .

Il linker genera un errore se address non è un multiplo di 64K. Facoltativamente, è possibile specificare le dimensioni del programma. Il linker genera un avviso se il programma non è in grado di adattarsi alle dimensioni specificate.

Nella riga di comando un altro modo per specificare l'indirizzo di base consiste nell'usare un file di risposta dell'indirizzo di base. Un file di risposta dell'indirizzo di base è un file di testo che contiene gli indirizzi di base e le dimensioni facoltative di tutte le DLL usate dal programma e una chiave di testo univoca per ogni indirizzo di base. Per specificare un indirizzo di base usando un file di risposta, usare un segno di corrispondenza (@) seguito dal nome del file di risposta, filename, seguito da una virgola, quindi dal key valore per l'indirizzo di base da usare nel file. Il linker cerca filename nel percorso specificato o se non viene specificato alcun percorso, nelle directory specificate nella LIB variabile di ambiente. Ogni riga in filename rappresenta una DLL e ha la sintassi seguente:

keyaddress [size] ; comment

key è una stringa di caratteri alfanumerici e non fa distinzione tra maiuscole e minuscole. In genere è il nome di una DLL, ma non è obbligatorio. l'oggetto key è seguito da una base address in linguaggio C, esadecimale o notazione decimale e un valore massimo facoltativo size. Tutti e tre gli argomenti sono separati da spazi o tabulazioni. Il linker genera un avviso se l'oggetto specificato size è minore dello spazio di indirizzi virtuale richiesto dal programma. Un comment oggetto viene specificato da un punto e virgola (;) e può trovarsi nella stessa riga o in una riga separata. Il linker ignora tutto il testo dal punto e virgola alla fine della riga. Questo esempio mostra parte di un file di questo tipo:

main   0x00010000    0x08000000    ; for PROJECT.exe
one    0x28000000    0x00100000    ; for DLLONE.DLL
two    0x28100000    0x00300000    ; for DLLTWO.DLL

Se il file contenente queste righe viene chiamato DLLS.txt, il comando di esempio seguente applica queste informazioni:

link dlltwo.obj /dll /base:@dlls.txt,two

Un altro modo per impostare l'indirizzo di base consiste nell'usare l'argomento BASE in un'istruzione NAME o LIBRARY . Le /BASE opzioni e /DLL insieme sono equivalenti all'istruzione LIBRARY .

Per impostare questa opzione del linker nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle>proprietà Proprietà di configurazione Linker>Avanzate.

  3. Modificare la proprietà Indirizzo di base.

Per impostare l'opzione del linker a livello di codice

Vedi anche

Informazioni di riferimento sul linker MSVC
Opzioni del linker MSVC