詳細セグメント マップ ファイル
API(*.map) への移動
詳細セグメント マップ ファイルは、最も多くの内容を含んだマップ ファイルで、詳細セグメント マップが格納されます。
詳細セグメント マップ ファイルの生成
Delphi の場合、DCC32(32 ビット Windows)、DCC64(64 ビット Windows)、DCCOSX(OS X)、または DCCIOS32(iOS シミュレータ)で詳細セグメント マップ ファイルの生成を有効にするには、[プロジェクト|オプション...|Delphi コンパイラ|リンク]を選択し、[マップ ファイル]の値を[詳細]に変更します。
C++ の場合、ILINK32(32 ビット Windows)、ILINK64(64 ビット Windows)、または XLINK(OS X)で詳細セグメント マップ ファイルの生成を有効にするには、[プロジェクト|オプション...|C++ リンカ|出力]を選択し、[マップ ファイルの種類]の値を[詳細なセグメント マップ]に変更します。コマンドラインでは、-s
スイッチで指定することができます。
詳細セグメント マップ ファイルの形式
通常のマップ ファイルの内容は、次のようになっています。
Start Length Name Class 0001:00401000 0000214D4H _TEXT CODE 0002:00423000 0000059B8H _DATA DATA 0003:004289B8 000002F24H _BSS BSS 0004:00000000 00000009CH _TLS TLS Detailed map of segments 0001:000000E4 00001038 C=CODE S=_TEXT G=(none) M=C:\TEMP\HELLO\HELLO.OBJ ACBP=A9 0001:0000111C 0000014F C=CODE S=_TEXT G=(none) M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9 . . . 0001:0001F484 00001F24 C=CODE S=_TEXT G=(none) M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9 0002:00000000 000001E8 C=DATA S=_DATA G=DGROUP M=C:\TEMP\HELLO\HELLO.OBJ ACBP=A9 0002:000001E8 000000C8 C=DATA S=_DATA G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9 . . . 0002:00004FD8 000009E0 C=DATA S=_DATA G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9 0003:00000000 00000244 C=BSS S=_BSS G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\CW32.LIB|iostream ACBP=A9 . . . 0003:00002F04 00000020 C=BSS S=_BSS G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9 0004:00000000 0000009C C=TLS S=_TLS G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\19.0\LIB\WIN32\RELEASE\CW32.LIB|xxv ACBP=A9 Address Publics by Name 0002:000024C4 @std@%basic_filebuf$b19std@%char_traits$b%%@3 0002:000010E8 @std@%basic_filebuf$c19std@%char_traits$c%%@3 0002:00002450 @std@%basic_ios$b19std@%char_traits$b%%@3 . . . Address Publics by Value 0001:000000E4 _main 0001:00000730 std::allocator<char>::allocator<char>() . . .
詳細なセグメント マップ ファイルの指定により、"Detailed map of segments" という新しいセクションがマップ ファイルに挿入されます。詳細なセグメント リストには(行ごとに)以下の情報が記載されています。
- セグメント モジュールの開始アドレス(<セグメント>:<オフセット>)
- セグメント モジュールの長さ
- セグメント クラス(C=)
- セグメント名(S=)
- セグメント グループ(G=)
- セグメント モジュール(M=)
- セグメントの ACBP 情報(ACBP=)
同じセグメントが複数のモジュールに含まれる場合、各モジュールは別々の行に表示されます。
ACBP フィールドは、A(アラインメント)、C(組み合わせ)、B(大きさ)の属性を Intel の定義にしたがって 4 つのビット フィールドにコード化したものです。C++ リンカでは、A、C、B の 3 つのフィールドだけを使用します。マップの ACBP の値は 16 進数で表示されます。以下に示すフィールド値の論理和が、表示される ACBP 値になります。
フィールド | 値 | 説明 |
---|---|---|
A(アラインメント) |
00 |
絶対セグメント |
20 |
バイト アラインメントのセグメント | |
40 |
ワード アラインメントのセグメント | |
60 |
パラグラフ アラインメントのセグメント | |
80 |
ページ アラインメントのセグメント | |
A0 |
名前のない絶対記憶領域 | |
C(組み合わせ) |
00 |
組み合わせ不可 |
08 |
パブリック シンボルを組み合わせるセグメント | |
B(大きさ。16 ビットの場合) |
00 |
64 KB より小さいセグメント |
02 |
64 KB のセグメント |