a.bat、a.com、a.exe 拡張子の違いは何ですか?
ベストアンサー1
元々、.COM
ファイルは 8086 コード (つまり、16 ビット x86) の文字通りの塊でした。これは固定アドレスにロードされることを意図しており、ローダーはアドレスの最初のバイトに直接ジャンプします。また、サイズも制限されています。
ファイルには.EXE
、より多くのヘッダー情報があります。そのため、動的リンクなどの構造が必要となり、読み込み時に DLL のコードを.EXE
のメモリ領域にパッチすることができます。これは元々 DOS から来ていますが、現在は Windows でも使用されています。
.COM
しかし、DOSとWindowsは最終的に、ファイル拡張子が何の意味も持たないモデルに移行しました.EXE
。プログラムローダーはまずファイルの最初の2バイトをチェックします。それが文字列MZ
(伝説によると、これはマイクロソフトの初期の従業員の頭文字を表している。)の場合は として扱いEXE
、そうでない場合はファイルであるかのようにロードしますCOM
。MZ
はプログラムを起動するための適切な x86 命令にマップされないため、このような処理を回避できます。 実質的な影響:DOS/Windows の一部のバージョンでは、 は.EXE
で命名でき.COM
、その逆も可能です。たとえば、DOS/Windows の多くのバージョンでは、有名な はCOMMAND.COM
実際には でしたEXE
。
前の段落が NT ベースの Windows バージョンにどの程度当てはまるかはわかりません。おそらく、今では Windows は NT ベースの.COM
ものを完全に放棄していると思います。
最後に、.BAT
ファイルとは、コマンド プロンプトで入力した場合と同じように実行されるコマンドのリストです。ただし、最近ではほとんどの人が という名前を付けています.CMD
。