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:

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

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

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.