説明とか

は別にいいか。 flatrun.c のハイライトは

    ptr = mmap(NULL, size, PROT_READ|PROT_WRITE|PROT_EXEC,
               MAP_FIXED|MAP_PRIVATE, fd, 0);
    if (ptr != NULL) return 1;

です。返り値が NULL なら成功、なんて珍しいですよね!

次回は .interp セクションに flatrun を指定してみる…とか考えたけどそれは無理なのであった。

あと「世界一単純な実行ファイルフォーマット」ってのは誇大広告かも。だって COM はヘッダ無いですよねという。

というわけで明日から 7月までアメリカとか行くらしいのでそろそろ準備した方がいい気がします。ゴルフサバは放置していくけどたぶん3ヶ月くらい動いてくれると期待。

binfmt_flat

おお面白そうな。

http://memo.wnishida.com/?date=20070411#p01

なんかぱっと見た感じ、 push/pop はいらない、 EBX は inc EBX 、ってとこでしょうか。

binfmt_flat はわざわざ kernel module 書かなくても binfmt_misc でサクっと書けると思ったので書いてみました。

http://shinh.skr.jp/binary/binfmt_flat.tgz

i@u ~/binfmt_flat> ls
Makefile  flatrun.c  hello*  hello.asm  setup_binfmt_flat.sh*
i@u ~/binfmt_flat> make
cc -o flatrun flatrun.c

i@u ~/binfmt_flat> sudo ./setup_binfmt_flat.sh
i@u ~/binfmt_flat> ls -l hello
-rwxr-xr-x 1 i i 31 2007-04-12 22:18 hello*
i@u ~/binfmt_flat> ./hello
Hello, world!

というわけで 31B の Hello, world! という。

関連

あ、飽きたら

$ sudo sh -c 'echo -1 > /proc/sys/fs/binfmt_misc/flat'

とかで消せます。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h