33

Ubuntu x86システムでのELFバイナリの逆アセンブルcode(.text)セクションが仮想アドレス0x8048000から始まり、下位のメモリアドレスがすべて使用されていないように見えることに気づかずにはいられませんでした。

これはかなり無駄なようで、Googleが明らかにするのは、STACK_TOPを含む民間伝承か、nullポインターの逆参照に対する保護のいずれかです。後者の場合は、128MBのギャップを残す代わりに、単一のページを使用することで修正できるようです。

だから私の質問はこれです-なぜレイアウトがこれらの値に固定されているのかについての決定的な答えはありますか、それとも単なる任意の選択ですか?

4

1 に答える 1

28

リンカーとローダーの本から:

386システムでは、テキストベースアドレスは0x08048000です。これにより、アドレス0x08000000の上にとどまりながら、テキストの下に適度に大きなスタックが許可され、ほとんどのプログラムで単一の第2レベルのページテーブルを使用できます。(386では、各第2レベルのテーブルが0x00400000アドレスをマップすることを思い出してください。)

于 2010-06-03T13:40:54.830 に答える