acidでバックトレース
では,落ちた時点のバックトレースを見てみよう.アタッチしたいプロセスのPIDを引数にacidを起動する.stk()でバックトレースが表示される.libcの_mainからmainが呼ばれ,fooで止まっているのがわかる.
term% acid 266 /proc/266/text:386 plan 9 executable /sys/lib/acid/port /sys/lib/acid/386 acid: stk() foo()+0x5 /usr/oraccha/src/fail.c:7 main()+0x5 /usr/oraccha/src/fail.c:12 _main()+0x31 /sys/src/libc/386/main9.s:16 acid:
foo+5番地で落ちているので,ソースリストを表示してみると,予想通りp[0] = 1を指している.
acid: src(foo+5) 2 #include <libc.h> 3 4 void 5 foo(void) { 6 int *p = 0; >7 p[0] = 1; 8 } 9 10 void 11 main() { 12 foo();