GDB 调试dumped core文件

在调试堆栈溢出的时候,用gdb加载文件运行的时候的地址会和直接运行的地址有出入,这个时候我们需要先在没有gdb的情况下运行程序,程序崩溃会生成core文件 然后我们用gdb filename core进行调试 我在ubuntu上测试的时候会发现当前目录里面并没有生成core文件,在研究一番后发现需要修改/proc/sys/kernel/core_pattern 文件 然后我们用root来执行下面命令: $> mkdir -p /tmp/cores $> chmod a+rwx /tmp/cores $> echo “/tmp/cores/core.%e.%p.%h.%t” > /proc/sys/kernel/core_pattern 然后在运行文件,然后会在/tmp/cores目录下面生成core文件: ➜ challenge11 git:(master) ✗ ll /tmp/cores total 100K -rw——- 1 kow kow 516K Jan 15 00:07 core.challenge11.25425.ubuntu.1516003636 然后就可以调试了: ➜ challenge11 git:(master) ✗ gdb challenge11 /tmp/cores/core.challenge11.25425.ubuntu.1516003636 GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free […]

gdb命令笔记

编译的时候: -g 开始调试:gdb [-tui] test 设置断点:(gdb) breakpoint test.c:123 or  (gdb) b main 运行程序(后面可以跟参数):(gdb) run [arg1 arg2] 清除断点:(gdb) clear 跟踪堆栈:(gdb) where 打印参数:(gdb) print f.BlockType 用16进制打印:(gdb) print/x f.BlockType 单步调试(不进入函数内部):(gdb) next or (gdb) n 单步调试(进入函数内部):(gdb) step or (gdb) s 在每个命令后都显示参数:(gdb) display f.BlockType 设定参数:(gdb) set f.BlockType=0 继续运行:(gdb) cont 推出:(gdb) quit

gdb peda常用指令

info 查看各种信息: info file  查看当前文件的信息,例如程序入口点(Entry point) info break 查看当前断点信息 disassemble+func 对制定的函数进行反汇编 break +”地址” 设置断点 r  等同于“run” 运行程序 c 等同于”continue”,继续执行 x /<n/f/u> <addr> n、f、u是可选的参数。   n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义。   f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i。   u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。   <addr>表示一个内存地址。   注意:严格区分n和u的关系,n表示单元个数,u表示每个单元的大小。 layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法: layout src:显示源代码窗口 layout asm:显示汇编窗口 layout regs:显示源代码/汇编和寄存器窗口 layout split:显示源代码和汇编窗口 layout next:显示下一个layout layout prev:显示上一个layout Ctrl + L:刷新窗口 Ctrl + x,再按1:单窗口模式,显示一个窗口 Ctrl + x,再按2:双窗口模式,显示两个窗口 Ctrl + […]