56B の ELF quine

kik さんが簡単だとおっしゃってたので書いてみました。

i@u ~/wrk/binhacks> ls -l quine_small
-rwxr-xr-x 1 i i 56 2006-11-16 22:41 quine_small*
i@u ~/wrk/binhacks> diff =(./quine_small) ./quine_small
i@u ~/wrk/binhacks>

すごそうに見えますが、実はこれは簡単すぎてつまらない…

        mov     al, 4           ; write = 4
        inc     ebx             ; stdout = 1
        mov     dl, filesize    ; strlen
        int     0x80
        xchg    eax, ebx        ; exit = 1
        xchg    ebx, ecx        ; exit(0)
        int     0x80

みたいなコードを magic の下に埋めてやれば 58B => 56B に簡単にできます。命令的にはスカスカですが、 56B がヘッダの位置的にバイナリサイズの限界です。

一応もっと深く ELF ヘッダとプログラムヘッダを重ねるのを検討したのですが、どうにも無理だと私は判断。一応実行開始までいけるパターンはあるんですが。

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