表示されるのは、オブジェクト ファイル内の各セクションの ELF セグメント フラグ、セクション タイプ、およびセクション フラグの組み合わせの解釈です。
LOADセクションがロード可能なセグメントに存在することを意味します。つまり、その内容は、プロセスの作成時にファイルからメモリに読み込まれます。
セクション フラグは、System V Application Binary Interface の第 4 章で詳しく説明されていますが、示されている名前とは少し異なりobjdumpます。
CODEセクションに実行可能コードが含まれていることを意味します。SHF_EXECINSTRセクションヘッダーのフラグで示されます
DATAセクションが実行可能ではないが書き込み可能であることを意味し、SHF_WRITEフラグの存在によって示されます
READONLYセクションが実行可能でも書き込み可能でもないため、読み取り専用メモリ ページに配置する必要があることを意味します。
ALLOCSHF_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。