COMファイルとは、コンピュータのファイル形式の1つである。主にMS-DOSやWindows(主に9x系)で使われていたが、それ以前の1970年代から使用されていた。
概要
COMファイルは、1970年代のOSであるVAX(ディジタル・イクイップメント社)やCP/M(デジタルリサーチ社)において、OSに対する命令(Command)を記述したファイル形式として用いられていた。CP/MのクローンからスタートしたMS-DOSにおいても、実行可能ファイルとしてCOMファイルが用いられている。
で、ファイルの中身だが、最初から最後までぎっしりと機械語で埋め尽くされている。現代(初版時点:2021年)のWindowsにおける標準的な実行可能ファイルの形式であるEXEファイルには、ファイルの作成日とかファイルサイズとか誤り訂正のためのチェックサムとか、とにかく色んな情報が詰め込まれており、それらの中の1つのセクションとして機械語を記述した箇所が存在する。だがCOMファイルは、そういったメタ的な情報を一切含んでいない。最初の1バイトから既に命令なのだ。実に潔い。
COMファイルを実行すると、メモリの0x0100番地以降にファイルの中身全てが読み込まれ、0x0100番地から順に実行されていく。うまいことやれば自分で自分を書き換えるプログラムなんかも作ることができる。ちなみに0x0000番地から0x00FF番地まではPSP(Program Segment Prefix)領域と呼ばれ、COMファイル実行時のパラメータなんかの情報が含まれている。
ところで、勘のいい人なら気づいただろうが、メモリの番地は16進数4桁で扱われるので、1つのプログラムで最大でも16の4乗、すなわち65,536バイト(実際にはそこからPSP領域の256バイトを引いた65,280バイト)しかメモリを使えない。これはだいたい64キロバイトであり、16ビット環境にとどまる限りこれ以上のサイズを持つプログラムは作れない(セグメント切り替えなどの技術を使えば突破できるが、抜本的な解決ではない)ため、64Kバイトの壁と呼ばれる。EXEファイルと比べるとあまりに小さいため、COMファイルは現代の32ビットや64ビットのコンピュータではほとんど用いられなくなってしまった(というか、64ビットOSでは仮想86モードが使えないので、16ビットのプログラムを直接実行できない)。初版筆者の環境では、Windows10のSystem32フォルダ内に5つのCOMファイルが生き残っている程度である(その上、いずれも実質的にCOMファイルの皮を被ったEXEファイルであるため、Windows10のシステムにおいてCOMファイルは絶滅したと言えるだろう)。
COMファイルの作り方
VAXやCP/M、MS-DOSの頃はどうしていたのか、初版筆者は知らない(そもそも生まれていない)。情報求む。
Windows Vistaの頃までは、コマンドプロンプトからDEBUGコマンドを起動し、アセンブリ言語でゴリゴリとプログラムを書いて保存すればCOMファイルを作ることができた。だが、Windows 7(の64ビット版)からはDEBUGコマンドが削除されたため、今後この方法でCOMファイルを作ることはできない。
実行ができなくなった現代ではCOMファイルを作ることもないだろうが、もし作りたい場合はネット上に数多くあるバイナリエディタを使って機械語をチマチマと打ち込むことで作れる。この方法なら未来永劫作れなくなることはない。
現代を(細々と)生きるCOMファイル
Windows10のご時世にあって、COMファイルは死に絶えたかに見えた。しかしインターネット上には未だにCOMファイルが転がっているのである。とは言ってもURLの「https://www.hogehoge.com/」のことではない。概要で述べた実行可能ファイルとしてのCOMファイルである。
ニコニコ的に馴染みの深いところでは、東京電機大学の非公認サークルであるAmusement Makersの旧公式サイトに置いてあるものが有名か。東方プロジェクト生みの親であるZUN氏が所属していたサークルであり、いわゆる東方旧作の体験版がここで配布されているが、この体験版の実行ファイルがCOMファイルである。Windows10では実行こそできないが、興味のある方はダウンロードして中身を覗いてみるのもいいかも知れない。ただし解析は私的利用の範囲にとどめること。
また、EXEファイルの中にもCOMファイルの痕跡は残っている。適当なEXEファイルをバイナリエディタで開くと、"This program cannot be run in DOS mode."という文字列が見える(違う場合もある)。その文字列が始まる前、具体的には0x40バイトから数バイトはCOMファイルと同じ形式でプログラムが記述されている。このプログラムは、EXEファイルを間違えて16ビット環境で実行してしまった時にエラーメッセージを出して終了するためのものである。COMファイルはこんなところで細々と生きているのだ。
関連リンク
- Amusement Makers(旧)公式サイト
- 東方旧作の体験版が配布されている。
- 2
- 0pt