Perché gli indirizzi di memoria virtuale per binari Linux partono da 0x8048000?
-
24-10-2019 - |
Domanda
Disassemblaggio di un binario ELF su un sistema x86 di Ubuntu non ho potuto fare a meno di notare che la sezione di codice (.text) inizia l'indirizzo virtuale 0x8048000 e tutti gli indirizzi di memoria più bassi sembrano essere inutilizzati.
Questo sembra essere piuttosto dispendioso e tutti Google salta fuori è o folklore coinvolgono STACK_TOP o la protezione contro dereferenzia null puntatore. L'aspetto quest'ultimo caso, come può essere fissato utilizzando una singola pagina invece di lasciare un vuoto 128MB.
Quindi la mia domanda è questa? - c'è una risposta definitiva sul motivo per cui il layout è stato fissato a questi valori o è solo una scelta arbitraria
Soluzione
dei linker e caricatori libro:
In sistemi 386, l'indirizzo di base testo è 0x08048000, che permette una ragionevolmente grande pila sotto il testo pur restando sopra indirizzo 0x08000000, permettendo maggior parte dei programmi di utilizzare un'unica tabella delle pagine di secondo livello. (Ricordiamo che sulla 386, ciascuna tabella secondo livello Mappe 0x00400000 indirizzi.)