詳細セグメント マップ ファイル

提供: RAD Studio
移動先: 案内検索

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 のセグメント

関連項目