Linuxバイナリの仮想メモリアドレスが0x8048000から始まるのはなぜですか?
-
24-10-2019 - |
質問
ubuntu x86システムでELFバイナリを分解すると、コード(.text)セクションが仮想アドレス0x8048000から始まり、すべての低いメモリアドレスが使用されていないようです。
これはかなり無駄であるように思われ、すべてのGoogleが表示されます stack_topを含む民話 または、ヌルポインターの控除に対する保護。後者のケースは、128MBのギャップを残す代わりに、単一ページを使用して修正できるように見えます。
私の質問はこれです - レイアウトがこれらの値に固定された理由に対する決定的な答えはありますか、それとも単なるarbitrary意的な選択ですか?
解決
から リンカーとローダー 本:
386システムでは、テキストベースアドレスは0x08048000であり、これにより、テキストの下にかなり大きなスタックが許可され、住所0x08000000の上に留まり、ほとんどのプログラムが1つの2番目のページテーブルを使用することができます。 (386では、各セカンドレベルのテーブルが0x00400000アドレスをマップすることを思い出してください。)
所属していません StackOverflow