2010年10月14日

gdbでcore dumpをいろんなパターンで調べてみる

gdbの使い方を知るため、各種試行した内容を以下に残す。


 

※具体的な各ファイルの読み込ませ方まで記載していない。後日改善予定。

 

試行1.core dumpのみでgdbを起動してみる。 

 
$ gdb -c core.7030 
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu".
(no debugging symbols found)
Using host libthread_db library "/lib/libthread_db.so.1".
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x0012f3c3 in ?? ()
(gdb) where
#0  0x0012f3c3 in ?? ()
#1  0x00000001 in ?? ()
#2  0xbffedfc0 in ?? ()
#3  0x0012f3ac in ?? ()
#4  0x00207658 in ?? ()
#5  0xbffedfa8 in ?? ()
#6  0x0804845a in ?? ()
#7  0x001fa5d0 in ?? ()
#8  0xbffedfc0 in ?? ()
#9  0xbffee018 in ?? ()
#10 0x0021fdec in ?? ()
#11 0x00206ca0 in ?? ()
#12 0x08048480 in ?? ()
#13 0xbffee018 in ?? ()
#14 0x0021fdec in ?? ()
#15 0x00000001 in ?? ()
#16 0xbffee044 in ?? ()
#17 0xbffee04c in ?? ()
#18 0x00207810 in ?? ()
#19 0x00000000 in ?? ()
(gdb)

とりあえず、アドレス0x0012f3c3で落ちたのが分かる。

ただ、この状態だとマシン語を逆アセンブルしながら追わないことには分からない。

試行2.core dumpファイルとexeファイルを指定してみる。

$ gdb test_core -c core.7030 
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

warning: Can't read pathname for load map: 入力/出力エラーです.
Error while mapping shared library sections:
./liba.so.1: そのようなファイルやディレクトリはありません.
Error while reading shared library symbols:
./liba.so.1: そのようなファイルやディレクトリはありません.
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Error while reading shared library symbols:
./liba.so.1: そのようなファイルやディレクトリはありません.
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x0012f3c3 in ?? ()
(gdb) where
#0  0x0012f3c3 in ?? ()
#1  0x00000001 in ?? ()
#2  0xbffedfc0 in ?? ()
#3  0x0012f3ac in ?? ()
#4  0x00207658 in _r_debug ()
#5  0xbffedfa8 in ?? ()
#6  0x0804845a in main () at test_core.c:8
(gdb)

test_core.cの8行目から呼び出されてとんだ先の0x0012f3c3で落ちたのは分かるようになった。0x0012f3c3に何の処理があるのか分からない。情報が少なくてデバッグにはならない。

試行3.core dumpファイルとexeファイルとliba.so.1(自分で作った共有ライブラリ)で調べてみる 

$ gdb test_core -c core.7030 
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

warning: Can't read pathname for load map: 入力/出力エラーです.
Reading symbols from /home/takeshi/temp/liba.so.1...done.
Loaded symbols for ./liba.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x0012f3c3 in liba () at liba.c:6
6       liba.c: そのようなファイルやディレクトリはありません.
        in liba.c
(gdb) where
#0  0x0012f3c3 in liba () at liba.c:6
#1  0x0804845a in main () at test_core.c:8
(gdb)

liba.cの6行目の処理で落ちたことが分かるようになった。

試行4.さらにソースコードも読み込ませてみる

$ gdb test_core -c core.7030 
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

warning: Can't read pathname for load map: 入力/出力エラーです.
Reading symbols from /home/takeshi/temp/liba.so.1...done.
Loaded symbols for ./liba.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x0012f3c3 in liba () at liba.c:6
6               int i = 10 / 0;
(gdb) where
#0  0x0012f3c3 in liba () at liba.c:6
#1  0x0804845a in main () at test_core.c:8
(gdb)

liba.cの6行目のint i = 10 /0;の処理で落ちたことが分かる。0での除算は致命的エラーなので、落ちて当たり前だ。

おまけ.ソースコードliba.cの6行目を変更してみる

$ gdb test_core -c core.7030 
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

warning: Can't read pathname for load map: 入力/出力エラーです.
Reading symbols from /home/takeshi/temp/liba.so.1...done.
Loaded symbols for ./liba.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x0012f3c3 in liba () at liba.c:6

warning: Source file is more recent than executable.
6               /* comment add for test */
(gdb) where
#0  0x0012f3c3 in liba () at liba.c:6
#1  0x0804845a in main () at test_core.c:8
(gdb)

表示されるソースが/* comment add for test */に変わった。バイナリとソースのバージョンは正確に一致していないとデバッグは出来ないようだ。

0 件のコメント:

コメントを投稿

ラベル

Android Android-x86 apache Backup Blog CentOS DDNS Debian DIY DTM Eclipse Excel Fedora Firefox Google Chrome Hyper-V java Kreetingkard KVM Linux Linux Mint Linuxコマンド例 Linuxシステム管理 Linux管理 Minecraft Minecraft: Wii U Edition Nintendo 3DS nmap O'REILLY Office KB openssl OpenStack openSUSE openSUSE 12 Parted Magic patch(1) PC DIY PC自作 pgrep(1) PHP Picasa pmap(1) PMMP Postfix postgresql printer ps(1) pukiwiki QEMU RHEL rhel5 rhel6 samba sar(1) savscan(1) savupdate(1) Scientific Linux 6 security SELinux SEO showrgb(1) Slackware Linux smbclient(1) smbstatus(1) snmpd(8) squid startx(1) stat(1) strace(1) syslogd(8) tac(1) tee(1) testdisk Thunderbird timezone tomcat touch(1) tr(1) trouble shooting tuning ubuntu uname(1) USB tethering USBブート USBメモリ vi(1) vim(1) virtualbox VMWare VMWare Player vmware server VMware Tools VNC Web Services Wii U Windows wordpress x window XAMPP イベント・祭り インターネット おもちゃ屋 カツカレー ギフト クリーニング店 ゲーム ゴミ コンビニ サンプルコード スプラトゥーン2 スポーツ スポット スマホ ソースコード その他 ダーツ ツールTIPS つぶやき ディスク設定 デジタルDIY デジタルガジェット デスクトップ設定 ドラッグストア トラブル トラブルシューティング ニュース ネットワーク設定 バス観光 バックアップ・リストア ビリヤード ブログパーツ プログラミング ブログ作成 ペット用品店 ホームセンター マンションギャラリー メダリーフ リモートアクセス設定 リラクゼーション レジストリ 為替 映画館 英語勉強メモ 横浜市 横浜市交通局 横浜矢向周辺 横濱たちばな亭 屋台 屋内プレイランド 屋内遊園地 温泉 花火 画像 海水浴場 外食 街猫 学校 楽天ウェブサービス 鎌倉 交通 公園 公共施設 国内x86サーバ 災害 雑貨店 参考文献 散髪 使い方 子供教室 死因 寺社 車関連 習い事 住居メンテナンス 出前 情報 食料品店 尻手駅前 新横浜 新横浜駅 新規出店情報 新築 新鶴見公園 新鶴見人道橋 神社 辛スナック 水族館 川崎 川崎駅 川崎市南部市場 川崎大師 卓球 段葛 中古屋 中山ビル 釣り施設 鶴岡八幡宮 鶴見 鶴見神社 電気店 電車 統計 動物園 南武線 日枝神社 買い物 買物 博物館等 八景島シーパラダイス 美容・サロン 百貨店 病院 風呂 複合商業施設 保育園 本屋 漫画 漫画喫茶 矢向 遊園地