2013-09-27

実行可能ファイルかつPDFファイルかつJarファイルかつHTMLファイルとして認識されるファイル

mix

CorkaMIX(Windows用)、CorkaMInuX(GNU/Linux用)、CorkaM-OsX(Mac OS X用)は、それぞれ、Windows、GNU/Linux、Mac OS Xにおいて、実行可能ファイル、PDFファイル、Jarファイル、HTMLファイルとして認識されるファイルである。

ファイルはプラットフォーム別になっている。それぞれのプラットフォームで、実行可能ファイル(OSからネイティブコードのためのファイルフォーマットとして認識され実行できる)、PDFファイル(そのプラットフォームのPDFビューワーで表示可能なPDFファイル)、Jarファイル(ZIP内にクラスとマニフェストを含むファイル)、HTMLファイル(JavaScriptでAlertを実行)

実行可能ファイルとは、それぞれのプラットフォーム用のファイルが、OSから、x86のPE/ELF/Mach-Oと認識されるファイルだということだ。もちろん実行でき、文字列を出力する。ただし、規格準拠ではない。多くのツールでは認識されない。重要なのは、OSによって認識され、実行できるかどうかだ。

PDFとは、それぞれのプラットフォームで有名なPDFビューワー(Adobe、Evince、Mac OS Xのツール)でPDFとして認識され、実際に描画でき、文字列が表示されることを意味する。

Jarファイルとは、Javaの実装により、クラスとマニフェストのファイルを含むZIPファイルフォーマットだと認識され、実行できるということだ。Javaの実装は、それほど厳格にZIPフォーマットを検証しないので可能となる。

HTMLファイルとは、それぞれのプラットフォームでHTMLファイルとして認識され、表示した結果、JavaScriptでAlertを実行するということだ。

これらのファイルを扱う実装は、だいぶファイルフォーマットに対して、寛容で慈悲深いので、規格違反だらけでも動作する。それを利用して、ひとつのファイルで複数のファイルフォーマットとして認識されるバイナリをこしらえたそうだ。

このバイナリは完全に手で書かれている。そのソースコードはyasm(masm互換のx86用マクロアセンブラー)でアセンブルすることにより、バイナリに変換できる。

2 comments:

Anonymous said...

(最新の)HTML規格では、どんな入力に対しても解析の仕方がエラー処理も含めて完全に規定されているので、実装が寛大なわけではありません。

Anonymous said...

今のところ、現実のHTMLパーサはHTML5(まだW3Cでも勧告の段階に入っていないので、現時点で「最新の規格」と呼べるかどうか疑問が残りますが)のアルゴリズムに厳密に準拠しているものばかりではありません。