2017-06-16 20 views
0

なぜelfのエントリポイントは0x8048320.ですか?This質問から、そのプロセスをマッピングするためにオペレーティングシステムカーネルが使用する仮想アドレスです。しかし、、プロセスがマップされる仮想アドレス(x86プロセッサー)は0xc0000000(ユーザー領域では3GB、カーネル領域では1GB)です。今0x8048320開始点アドレスの背後にある理論は何ですか?それは0c0000000hであるべきではないでしょうか?elf実行可能ヘッダのエントリポイント

よろしく、

+0

エリートヘッダーからのエントリーポイント: 'readelf -h a.out' – Aimal

+0

[実行ファイルのエントリポイントアドレスが0x8048330(0x330は.textセクションのオフセットです)]の重複可能性があります。(https://stackoverflow.com/questions/12488010 /なぜ私の実行可能ファイル内のエントリポイントアドレスは0x8048330-0x330-of-offset-ofですか) –

答えて

1

エントリポイントは、実行可能ファイルのマッピングの始まりではありません。これは、プログラムの開始時に実行される最初の命令のアドレスです。したがって、通常は.textセクションの真中にあります。

GCCまたはコンパチブルコンパイラを使用する場合は、_startのアドレスがlibcになります。それは最終的にあなたのmain()と呼ぶ関数です。

あなたの例から、0x8048320ベースアドレスはおそらく0x8000000なり、_startのオフセットが0x48320になります。しかし、私のマシンで

、:

$ readelf -h /usr/bin/ls | grep Entry 
Entry point address:    0x404030 

すべてのこれらの仮想アドレスは、通常、コンパイラおよび/またはリンカーまでです。

関連する問題