(補足)

最初のいちばんオーソドックスな奴、一応解説としてbacktraceを貼っておきます。

% gdb ./a.out
(gdb) b x if main>0
Breakpoint 1 at 0x80483ba: file iyara.c, line 1.
(gdb) r
Breakpoint 1, x () at iyara.c:1
1       main;__attribute((constructor,destructor))x(){main?puts("world!"):exit(main=puts("hello"));}
(gdb) bt
#0  x () at iyara.c:1
#1  0x0804837b in __do_global_dtors_aux ()
#2  0x08048494 in _fini ()
#3  0x00b5e0fd in _dl_fini () from /lib/ld-linux.so.2
#4  0x00b9798e in exit () from /lib/libc.so.6
#5  0x080483ef in x () at iyara.c:1
#6  0x08048465 in __do_global_ctors_aux ()
#7  0x080482b9 in _init ()
#8  0x08048416 in __libc_csu_init ()
#9  0x00b826c9 in __libc_start_main () from /lib/libc.so.6
#10 0x08048331 in _start ()

2度めのx()の呼び出しでのバックトレースです。これでようやく、先日のPTR_MANGLEのエントリと話がつながりました(_dl_fini)。いやそんなはずがない。