表示されるのは、オブジェクト ファイル内の各セクションの ELF セグメント フラグ、セクション タイプ、およびセクション フラグの組み合わせの解釈です。
LOAD
セクションがロード可能なセグメントに存在することを意味します。つまり、その内容は、プロセスの作成時にファイルからメモリに読み込まれます。
セクション フラグは、System V Application Binary Interface の第 4 章で詳しく説明されていますが、示されている名前とは少し異なりobjdump
ます。
CODE
セクションに実行可能コードが含まれていることを意味します。SHF_EXECINSTR
セクションヘッダーのフラグで示されます
DATA
セクションが実行可能ではないが書き込み可能であることを意味し、SHF_WRITE
フラグの存在によって示されます
READONLY
セクションが実行可能でも書き込み可能でもないため、読み取り専用メモリ ページに配置する必要があることを意味します。
ALLOC
SHF_ALLOC
セクションがメモリを占有することを意味します。たとえば、フラグで示されるプロセスの作成時にセクションの内容を保持するためにメモリ ページが実際に割り当てられます。一部のセクション (デバッグ情報を含むセクションなど) は、通常のプログラム実行中にメモリに読み込まれず、ALLOC
メモリを節約するようにマークされません。
タイプ のセクションにSHT_PROGBITS
は、ファイル内に対応するコンテンツがあり、 として表示されCONTENTS
ます。一部のセクションには、ファイル内に対応するコンテンツがありません。たとえば、.bss
タイプが のセクションSHT_NOBITS
です。
この.text
セクションには、プログラムの実行可能コードが含まれています。CONTENTS
タイプなのでそのまま表示されSHT_PROGBITS
ます。このセクションは存在するためメモリを予約する必要がALLOC
あり、その内容はファイルからロードする必要があります。これは、可能なLOAD
セグメントに配置されているためです。通常、プログラム コードは変更できないため、セクションは読み取り専用メモリに配置されます。実行される命令とCODE
フラグが含まれています。
静的ストレージ クラスで初期化.data
された変数がセクションに入ります。それらの初期値はファイルに保存され、プロセスの作成時にそこから読み取られます。C/C++ では、グローバル変数、静的ローカル変数、C++ 静的メンバー変数が適切に初期化されますstatic int a = 10;
。Fortran は、初期化されたSAVE
-d 変数とブロックを配置します。これらには、ブロックステートメントでCOMMON
初期値が与えられます。DATA
.bss
セクション (歴史的な名前、Block Started by Symbolの略語) は、最も単純なものです。初期化されていない変数を静的ストレージ クラスで保持します。これはタイプのセクションでありSHT_NOBITS
、ファイル内でスペースを取りません。メモリはALLOC
そのために割り当てられますが、メモリを事前設定するためにファイルから何も読み取られません。カーネルメモリアロケータによって提供されるとおり、すべてゼロのままです。
定数は通常.rodata
セクションに入ります (この例に.data
はありません) READONLY
。