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 触りはじめた時には駆逐されてたしなぁ…