/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:
key
address
[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
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle>proprietà Proprietà di configurazione Linker>Avanzate.
Modificare la proprietà Indirizzo di base.
Per impostare l'opzione del linker a livello di codice
- Vedere BaseAddress.
Vedi anche
Informazioni di riferimento sul linker MSVC
Opzioni del linker MSVC