/* * usage is easy, though not very friendly: * gcc reg-bug.c * ./a.out | od -tx4 * * if the values outputted by hexdump are different the 'bug' is present * else the bug is not present * on a system without the bug: dvorak$ dmesg | head -1 Linux version 2.2.21 (kernel@debian) (gcc version 2.95.4 20011002 (Debian prerelease)) #6 Sat Sep 7 22:48:42 CEST 2002 dvorak$ gcc reg-bug.c dvorak$ ./a.out | od -tx4 0000000 bff7de6c bff7de6c * on a 'buggy' system: * (m4xx) dmesg | head -1 (m4xx) Linux version 2.4.18 (maxx@meuuh) (gcc version 2.95.4 20011002 (Debian +prerelease)) #2 Mon Jul 29 17:01:30 CEST 2002 (m4xx) $ gcc reg-bug.c (m4xx) $ ./a.out | od -tx4 (m4xx) 0000000 bffffdcc bffffdbc */ int main(void) { __asm__(" pushl $0x00010001 pushl $0x0 pushl $0x00010001 pushl $0x1 movl %esp, %ebx pushl %ebx movl $0x2, %ecx movl $0xa8, %eax movl $(-1), %edx int $0x80 pushl %ebx movl %esp, %ecx movl $0x08, %edx movl $0x04, %eax movl $0x01, %ebx int $0x80 movl $0x01, %eax xorl %ebx, %ebx int $0x80 "); }