2010-06-03 9 views
28

Demontaż pliku binarnego ELF na systemie Ubuntu x86 Nie mogłem nie zauważyć, że sekcja kodu (.text) zaczyna się od wirtualnego adresu 0x8048000, a wszystkie adresy niższej pamięci wydają się być nieużywane.Dlaczego adresy pamięci wirtualnej dla plików binarnych linux zaczynają się od 0x8048000?

To wydaje się być raczej marnotrawstwem, a wszystkie Google pojawiają się jako folklore involving STACK_TOP lub ochrona przed dereferencjami o wartości zerowej. Ten drugi przypadek wygląda na to, że można go naprawić za pomocą pojedynczej strony zamiast pozostawić lukę 128 MB.

Moje pytanie brzmi - czy istnieje ostateczna odpowiedź na pytanie, dlaczego układ został poprawiony do tych wartości, czy jest to tylko arbitralny wybór?

+0

Nie znam rzeczywistej odpowiedzi; ale może ten artykuł może pomóc lub przynajmniej dostarczyć interesującą lekturę! http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –

+0

możliwy duplikat [Dlaczego jest to wirtualny adres punktu wejścia ELF formularza 0x80xxxxx a nie zero 0x0?] (http: // stackoverflow .pl/questions/2187484/why-is-the-elf-execution-entry-point-virtual-address-of-the-form-0x80xxxxx-and-n) –

Odpowiedz

24

Z Linkers and loaders książki:

przez 386 systemów, adres bazowy tekst jest 0x08048000, który pozwala na dość duży stos pod tekstem, a jednocześnie pobyt powyżej adresu 0x08000000, co pozwala większości programów użyć jednej sekundy -poziom strony tabeli. (Przypomnij sobie, że w 386 każda tabela drugiego poziomu mapuje adresy 0x00400000.)

Powiązane problemy