用gdb调试core dump文件

gdb基本的使用方法在此就不说了。

载入core文件的命令行为:

dgb exe core

例如

gdb ./testall ./core.2345

最重要的一个命令是where,这个就像windbg的命令 !analyze -v


我模拟了几个crash的情况,一个一个说。

第一个:删除两次指针导致crash的情况

源程序
 char *a = new char[2];
 delete []a;
 delete []a;

运行时
*** glibc detected *** ./testall: double free or corruption (fasttop): 0x09d7e008 ***
======= Backtrace: =========
/lib/libc.so.6[0x1a6d35]
/lib/libc.so.6(cfree+0x59)[0x1aad29]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x683f5c1]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0x683f61d]
./testall[0x804a518]
./testall[0x804a242]
./testall[0x80493e4]
./testall[0x80495e0]
./testall(__gxx_personality_v0+0x19f)[0x804906b]
/lib/libc.so.6(__libc_start_main+0xdc)[0x152ebc]
./testall(__gxx_personality_v0+0xb5)[0x8048f81]
======= Memory map: ========
0013d000-00294000 r-xp 00000000 fd:00 12815259   /lib/libc-2.5.so
00294000-00296000 r-xp 00157000 fd:00 12815259   /lib/libc-2.5.so
00296000-00297000 rwxp 00159000 fd:00 12815259   /lib/libc-2.5.so
00297000-0029a000 rwxp 00297000 00:00 0
0089a000-008a5000 r-xp 00000000 fd:00 12815281   /lib/libgcc_s-4.1.2-20080825.so.1
008a5000-008a6000 rwxp 0000a000 fd:00 12815281   /lib/libgcc_s-4.1.2-20080825.so.1
00b52000-00b6d000 r-xp 00000000 fd:00 12815258   /lib/ld-2.5.so
00b6d000-00b6e000 r-xp 0001a000 fd:00 12815258   /lib/ld-2.5.so
00b6e000-00b6f000 rwxp 0001b000 fd:00 12815258   /lib/ld-2.5.so
00b94000-00b95000 r-xp 00b94000 00:00 0          [vdso]
00cd0000-00cf7000 r-xp 00000000 fd:00 12815266   /lib/libm-2.5.so
00cf7000-00cf8000 r-xp 00026000 fd:00 12815266   /lib/libm-2.5.so
00cf8000-00cf9000 rwxp 00027000 fd:00 12815266   /lib/libm-2.5.so
00d17000-00d2d000 r-xp 00000000 fd:00 12815261   /lib/libpthread-2.5.so
00d2d000-00d2e000 r-xp 00015000 fd:00 12815261   /lib/libpthread-2.5.so
00d2e000-00d2f000 rwxp 00016000 fd:00 12815261   /lib/libpthread-2.5.so
00d2f000-00d31000 rwxp 00d2f000 00:00 0
0678c000-0686c000 r-xp 00000000 fd:00 12690777   /usr/lib/libstdc++.so.6.0.8
0686c000-06870000 r-xp 000df000 fd:00 12690777   /usr/lib/libstdc++.so.6.0.8
06870000-06871000 rwxp 000e3000 fd:00 12690777   /usr/lib/libstdc++.so.6.0.8
06871000-06877000 rwxp 06871000 00:00 0
08048000-0804e000 r-xp 00000000 fd:00 6127658    /home/zhaha05/test/testall/testall
0804e000-0804f000 rw-p 00005000 fd:00 6127658    /home/zhaha05/test/testall/testall
09d7e000-09d9f000 rw-p 09d7e000 00:00 0          [heap]
b7f36000-b7f38000 rw-p b7f36000 00:00 0
b7f48000-b7f4b000 rw-p b7f48000 00:00 0
bf8da000-bf8ef000 rw-p bffe9000 00:00 0          [stack]
Aborted (core dumped)

gdb调试core文件时

 gdb testall core.8812
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-45.el5)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/zhaha05/test/testall/testall...done.
[New Thread 8812]

warning: .dynamic section for "/lib/libc.so.6" is not at the expected address

warning: difference appears to be caused by prelink, adjusting expectations
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /usr/lib/libstdc++.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./testall'.
Program terminated with signal 6, Aborted.
#0  0x00b94402 in __kernel_vsyscall ()
(gdb) where
#0  0x00b94402 in __kernel_vsyscall ()
#1  0x00165e30 in raise () from /lib/libc.so.6
#2  0x00167741 in abort () from /lib/libc.so.6
#3  0x0019e99b in __libc_message () from /lib/libc.so.6
#4  0x001a6d35 in _int_free () from /lib/libc.so.6
#5  0x001aad29 in free () from /lib/libc.so.6
#6  0x0683f5c1 in operator delete(void*) () from /usr/lib/libstdc++.so.6
#7  0x0683f61d in operator delete[](void*) () from /usr/lib/libstdc++.so.6
#8  0x0804a518 in FILE_OPEN_rha_test_c::TestMethod (this=0x9d7e108, parser=...)
    at file.cpp:25
#9  0x0804a242 in rha_test_case_c::run_command (command=0x9d7e2cc "FILE.OPEN",
    parser=...) at shell_test.h:194
#10 0x080493e4 in shell_test_c::execute_command (
    cmd=0xbf8ecc94 "FILE.OPEN t.txt") at shell_test.cpp:68
#11 0x080495e0 in shell_test_c::go (this=0xbf8ed4cc, argc=1, argv=0xbf8ed574)
    at shell_test.cpp:107
#12 0x0804906b in main (argc=1, argv=0xbf8ed574) at main.cpp:7
(gdb)

第二个:空指针

源程序
  char *nullpointer = NULL;
  strcpy(nullpointer,"12334567890");


运行时
Segmentation fault (core dumped)
gdb调试时
Program terminated with signal 11, Segmentation fault.
#0  0x0804a48e in FILE_OPEN_rha_test_c::TestMethod (this=0x84e1108, parser=...)
    at file.cpp:23
23              strcpy(nullpointer,"12334567890");

第三个:buffer overflow

源程序
 char overflow[1];
 strcpy(overflow,"1234567890");

运行时
Segmentation fault
gdb调试时
Program terminated with signal 11, Segmentation fault.
#0  0x0683a919 in __gnu_cxx::__exchange_and_add(int volatile*, int) ()
   from /usr/lib/libstdc++.so.6
(gdb) where
#0  0x0683a919 in __gnu_cxx::__exchange_and_add(int volatile*, int) ()
   from /usr/lib/libstdc++.so.6
#1  0x0681ed24 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() () from /usr/lib/libstdc++.so.6
#2  0x0804a4d1 in FILE_OPEN_rha_test_c::TestMethod (this=0x8e7f108, parser=...)
    at file.cpp:24
#3  0x0804a1e2 in rha_test_case_c::run_command (command=0x8e7f2cc "FILE.OPEN",
    parser=...) at shell_test.h:194
#4  0x08049384 in shell_test_c::execute_command (
    cmd=0xbff0bd54 "FILE.OPEN t.txt") at shell_test.cpp:68
#5  0x08049580 in shell_test_c::go (this=0xbff0c58c, argc=1, argv=0xbff0c634)
    at shell_test.cpp:107
#6  0x0804900b in main (argc=1, argv=0xbff0c634) at main.cpp:7




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simple-Soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值