int main ( int argc, char * argv[] ) { unsigned int i = 0x12345678; unsigned short int *q = NULL; unsigned char *p = ( unsigned char * )&i;
*p = 0x00; q = ( unsigned short int * )( p + 1 ); *q = 0x0000; return( EXIT_SUCCESS ); } /* end of main */ --------------------------------------------------------------------------
$ ./bus 总线错误 (core dumped) $ gdb ./bus core GNU gdb 5.0 #0 0x1084c in main (argc=1, argv=0xffbefc54) at bus.c:16 16 *q = 0x0000; (gdb) disas main Dump of assembler code for function main: 0x10810 : save %sp, -128, %sp 0x10814 : st %i0, [ %fp + 0x44 ] 0x10818 : st %i1, [ %fp + 0x48 ] 0x1081c : sethi %hi(0x12345400), %o1 0x10820 : or %o1, 0x278, %o0 ! 0x12345678 0x10824 : st %o0, [ %fp + -20 ] 0x10828 : clr [ %fp + -24 ] 0x1082c : add %fp, -20, %o0 0x10830 : st %o0, [ %fp + -28 ] 0x10834 : ld [ %fp + -28 ], %o0 0x10838 : clrb [ %o0 ] 0x1083c : ld [ %fp + -28 ], %o0 0x10840 : add %o0, 1, %o1 0x10844 : st %o1, [ %fp + -24 ] 0x10848 : ld [ %fp + -24 ], %o0 0x1084c : clrh [ %o0 ] 0x10850 : clr %i0 0x10854 : b 0x1085c 0x10858 : nop 0x1085c : ret 0x10860 : restore End of assembler dump. (gdb) i r pc pc 0x1084c 67660 (gdb) i r o0 o0 0xffbefbdd -4260899 (gdb) x/3bx 0xffbefbdd 0xffbefbdd: 0x34 0x56 0x78 (gdb)