2010-06-03 6 views
28

kodu (.text) bölümünde sanal adrese 0x8048000 başlar ve tüm alt bellek adresleri kullanılmayan gibi görünüyor dikkat edin.Neden linux ikili için sanal bellek adresleri 0x8048000 de başlayacağım? Elimde olmadan olamazdı bir Ubuntu x86 sistemde ELF ikili Disassembling

Bu oldukça savurgan gibi görünüyor ve tüm Google folklore involving STACK_TOP veya null işaretçi dereferences karşı koruma ya olduğu ortaya çıkıyor. tek sayfa kullanarak yerine 128MB boşluk bırakarak düzeltilebilir gibi sonuncu durumda görünüyor. düzen bu değerlere giderildi neden kesin bir cevabın var olan ya da sadece keyfi bir seçimdir -

Benim soru şudur? Linkers and loaders kitaptan

+0

Gerçek cevabı bilmiyorum; ama belki bu yazı ya yardımcı olabilir ya da en azından ilginç bir okuma sağlayabilir! arasında http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –

+0

olası yinelenen [Neden ELF yürütme giriş noktası sanal formu 0x80xxxxx adresi değil sıfır 0x0'dır?] (http: // stackoverflow .com/sorular/2187484 /)-cini-yürütme-giriş-nokta-sanal-adres-ve-n-of-form-0x80xxxxx neden –

cevap

24

: 386 sistemlerinde

, metin taban adresi hala tek bir saniye kullanmak için en programları izin, adres 0x08000000 yukarıda kalırken metninin altında oldukça büyük bir yığın izin 0x08048000 olduğunu -katlı sayfa tablosu. (386'da, her ikinci düzey tablo 0x00400000 adreslerini eşler.)