a.out だったら小さくなるかも、って質問に答えたんですが、 a.out ってファイル内オフセットを指定できないから、ヘッダの空間使えないみたいで、たぶんこんなくらいで限界ぽいというかつまらない…
i@u ~/wrk/binhacks> ls -l hello_aout -rwxr-xr-x 1 i i 63 2006-11-17 05:05 hello_aout* i@u ~/wrk/binhacks> file hello_aout hello_aout: Linux/i386 pure executable (NMAGIC), stripped i@u ~/wrk/binhacks> ./hello_aout Hello, world!
まぁ、 ELF の 58B の方が短いというのは非常にすごいということが再確認できます。
BITS 32 ORG 0 dw 0x108 ; magic db 100 ; 386 db 0 dd textsz dd 0 dd 0 dd 0 dd entry - text dd 0 dd 0 text: db "Hello, world!", 10 entry: lea ebx, [eax+1] xor ecx, ecx lea edx, [eax+14] mov al, 4 int 0x80 mov al, 1 dec ebx int 0x80 textsz equ $ - text
ヘッダ 32B で Hello が 14B で実行コードが 17B 。いくつかどうでもいい知識が身につきました。だいたい a.out なんて私が Linux 触りはじめた時には駆逐されてたしなぁ…