1
私はここに簡単な質問を持っているシンプルなCプログラム(gcc -o file file.cpp
)をコンパイルしobjdump -h file
を実行するには、次の出力が得られ、.textデータセグメントと.finiデータセグメントの間に空白がありますか?
12 .text 00000172 0000000000400400 0000000000400400 00000400 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .fini 00000009 0000000000400574 0000000000400574 00000574 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
。
.text
セクションの後に2バイトのギャップがあるのはなぜですか? 0x400400 + 0x172 = 0x400572
ですが、.fini
セクションは0x400574
から始まりますか?これはアラインメントと関係がありますか?他のセクションと同様のギャップがあることに気付きました。
おそらくアラインメント。しかし、なぜあなたは尋ねますか?好奇心?あるいは、この質問につながる別の問題がありますか? –
仮想アドレス空間 – martianwars
の '.text'セグメントの範囲を特定する方法を見つけようとすると、おそらくあなたのリンカスクリプトに次のようなものがあります:'。 = ALIGN(4); ' –