1

MASM初心者です。したがって、質問は非常に基本的なものになる可能性があります。

MASM アセンブラを使用すると、「Link Map」という出力ファイルが作成されます。その内容は、データ セグメント、コード セグメント、スタック セグメントなど、さまざまなセグメントの開始オフセットと長さで構成されます。これらの情報はどこに記述されているのでしょうか。彼らは、EXE ファイル内にさまざまなセグメントがどのように配置されているか、またはプログラム ローダーによって EXE ファイルがメモリにロードされた後、メモリ内にセグメントがどのように配置されているかについて話しているのですか?

ところで: "Assume" ディレクティブは何をしますか? 私の理解では、プログラムローダーがそれを使用してDS、CS、SS、ESレジスタを適宜設定できるように、アセンブラにいくつかの情報をexeファイルヘッダーに出力するように指示します。私はこれで正しいですか?

前もって感謝します。

4

1 に答える 1

1

リンカー マップ

これは MASM 固有ではありません。リンカーの一部です。いえ

ml /Fm foo.asm

と同じです

ml foo.asm /link /map

また

ml /c foo.asm
link foo.obj /map

cl.exeにもこのオプションがあり ( /Fm)、同じことを行います。

これは、EXE または DLL イメージに配置されているセクションのリストです。例: コード、データ、リソース、インポート テーブル、エクスポート テーブルなど。

オフセットは、イメージ セクションの開始点を基準にしています。リンカーによって、多数のオブジェクト セクションを結合して 1 つのイメージ セクションにすることができます。

例えば

 0002:00001514 00000014H .idata$2                DATA
 0002:00001528 00000014H .idata$3                DATA
 0002:0000153c 000000f8H .idata$4                DATA
 0002:00001634 00000464H .idata$6                DATA

上記は.obj、 で始まるサフィックスが含まれているため、オブジェクトセクション (ファイルから取得されます)$です。.idataリンカーは、それらを最終的なイメージ モジュールの1 つのセクションにマージします (接尾辞の辞書順)。オフセットは、リンカがインポート アドレス テーブル (.idataセクション) を割り当てる場所の先頭に相対的です。

推定

レジスタの偶発的な誤用を防ぐために、コンパイル時のチェックを提供します。コードは生成されません。見る

于 2010-04-04T03:41:27.370 に答える