安装插件

1. 安装GDB增强工具 (gef)
  * wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh
2. GDB安装插件(在root权限安装,用户权限使用不了需要在用户权限下安装)
  git clone https://github.com/gatieme/GdbPlugins.git ~/GdbPlugins  (安装gdb的Python脚本插件)
  echo "source ~/GdbPlugins/peda/peda.py" > ~/.gdbinit    (默认打开gdb插件是pada)  倾向于破解和逆向
  echo "source ~/GdbPlugins/gef/gef.py" > ~/.gdbinit      倾向于debug 逆向
  echo "source ~/GdbPlugins/gdbinit/gdbinit" > ~/.gdbinit    个人定制

pwndbg安装
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

cat .gdbinit

3.Linux程序发布流程
  * 确定程序是否存在符号表
    readelf -s test-1
  * 生成符号表
    objcopy --only-keep-debug test-1 test-1.symbol
  * 生成发布程序
    objcopy --strip-debug test-1 test-release
  * 使用符号表进行程序debug
    gdb -q --symbol=test-1.symbol --exec=test-release

gdb 语法的使用
gcc -g -o main main.c
gdb -q (-q用以使得gdb不输出gdb程序的版本等信息)-tui 选项开启gdb命令输入和源代码的分屏显示 main
分别在父进程和子进程的位置设置好断点(b 18), 然后r运行程序即可断下来:
所有命令,只要不出现冲突,都可以进行简写,如list可直接简写为l,break可直接简写为b。

list 行号/函数名 查看指定位置的源码
info break|watch|... 显示断点信息,watch 信息

break 行号/函数名 设置断点
tbreak/tb 临时断点(断点只生效一次)
del/clear 删除断点
ingore (ignore N COUNT)忽略断点N,次数为COUNT,即前COUNT次断点不触发

start 运行(自动在main函数处停下)
run 运行程序
next 单步运行,不进入函数内部
step 单步运行,进入函数内部
ni 下一条指令
si 进入函数(汇编级)
continue 继续运行,直到结束或者断点
n 10 运行10行代码
ni 10 运行10条指令
until 退出循环
finish 退出函数(相当于是快进)
return 退出函数(它是强制退出,跳过了中间的指令)
call 调用函数

watch 变量|表达式 观察变量或表达式,若其改变则停止
print 变量|表达式 查看程序运行时对应的变量或表达式的值
set 变量=新值 设置变量在内存中的当前值
backtrace/bt 若程序宕掉,查看函数调用栈
display 自动打印变量(每次程序暂停,都自动打印)
x 参数为内存地址,打印内存(help x查看用法)
info reg all 打印所有寄存器

条件断点:比如 b foo if a==1 ,条件成立是触发断点
执行shell命令(在命令前输入shell即可,比如shell clear就相当于是执行了shell中的clear命令,清屏)

stack 50 查看连续50个调用栈
vmmap 查看程序的段
heap
bins
distance addr1 addr2 计算两个内存的距离

x/<n/f/u> <addr> 来查看内存地址中的值
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容
f 表示显示的格式,如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
  x 按十六进制格式显示变量。
  d 按十进制格式显示变量。
  u 按十六进制格式显示无符号整型。
  o 按八进制格式显示变量。
  t 按二进制格式显示变量。
u 参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。
当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
x/40gz 从指定地址向后查看40个内存值,8字节对齐16进制显示

多进程调试
设置follow-fork-mode (parent/child)和detach-on-fork (on/off)的值来调试子程序
follow-fork-mode detach-on-fork
  parent on 只调试主进程(GDB默认)
  child on 只调试子进程
  parent off 同时调试两个进程, gdb跟主进程, 子进程block在fork位置
  child off 同时调试两个进程,gdb跟子进程,主进程block在fork位置

set follow-fork-mode child
set detach-on-fork off
show follow-fork-mode/detach-on-fork

进程间切换
gdb会为inferiors分配ID, 其中带有*的进程是正在调试的inferior;gdb将每一个被调试程序的执行状态记录在一个名为inferior的结构中;
info inferiors 查看当前此时显示gdb调试的所有inferior
inferior ID切换到对应id的断点进程

多线程调试
gcc -g -o thread -lpthread thread.c
info threads 来查看有多少个线程
thread threadID 切换调试的线程
show non-stop 查看线程调试时运行的模式
show scheduler-locking
set scheduler-locking on|off|step
  on 锁定其他线程,只有当前线程执行
  off 不锁定任何线程
  step 只有被调试线程运行
thread apply threadID gdbCmd 指定某线程执行某gdb命令
thread apply all gdbCmd 全部的线程执行某gdb命令

程序静态/动态分析工具
IDA Pro/ winhex pedit binwalk(识别压缩壳,解压等)
readelf c++filter
OllyDebug
gdb

gdb插件调试的常用命令
peda
aslr on|off
aslr
dumprop
elfheader
elfsysmbol
dumpargs

checksec
  canary 栈保护 加入cookie
  NX 栈不可执行
  PIE(alsr) 每次执行内存地址随机化
  Fortify 栈参数保护检测
  relro GOT只读

参考:

汇编:https://blog.csdn.net/weixin_51325053/article/details/117511668
https://www.136.la/mysql/show-44335.html
https://blog.csdn.net/qq_29809823/article/details/118941735
多线程: https://blog.csdn.net/weixin_42158742/article/details/113100151
多进程: https://blog.csdn.net/qq_40827990/article/details/110423679

x命令:https://blog.csdn.net/u013985241/article/details/89169007

gdb 常用命令总结的更多相关文章

  1. Linux GDB常用命令一栏

    Linux GDB 常用命令如下: 1.启动和退出gdb (1)启动:gdb ***:显示一段版权说明: (*** 表示可执行程序名) (2)退出:quit.有的时候输入quit后会出现相关提示:类似 ...

  2. gdb常用命令记录

    gdb常用命令 最近在研究nginx源码,gdb用于调试非常方便,之前这篇有研究过如何使用gdb调试nginx:https://www.cnblogs.com/yjf512/archive/2012/ ...

  3. GDB常用命令系列

    本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions.html 本文为索引,请点击以下链接进行阅读: GDB调试原理——p ...

  4. GDB常用命令使用说明(一)

    本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions1.html 全部关于gdb的文章索引请点这里 GDB(GNU Deb ...

  5. gdb 常用命令总结(精优)

    格式说明: [xxx]:可选参数,即可以指定可以不指定,实际输入的内容是 xxx <xxx>:占位参数,即必须指定的参数,实际输入的内容是 xxx gdb 常用命令: gdb [file] ...

  6. C 调试 gdb常用命令

    gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) b ...

  7. Linux调试工具strace和gdb常用命令小结

    strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用. strace调试工具 strace工具用于跟踪进程执行时的系统调用和所接 ...

  8. 第04课:GDB常用命令详解(上)

    本课的核心内容如下: run命令 continue命令 break命令 backtrace与frame命令 info break.enable.disable和delete命令 list命令 prin ...

  9. 第07课:GDB 常用命令详解(下)

    本课的核心内容: disassemble 命令 set args 和 show args 命令 tbreak 命令 watch 命令 display 命令 disassemble 命令 当进行一些高级 ...

  10. 第06课:GDB 常用命令详解(中)

    本课的核心内容: info 和 thread 命令 next.step.util.finish.return 和 jump 命令 info 和 thread 命令 在前面使用 info break 命 ...

随机推荐

  1. 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  2. 单一资产VAR风险--基于python

    数据源:使用 AKShare包.它是一个免费.开源的 Python 财经数据接口包.网址https://www.akshare.xyz/index.html 一.获取数据: 计算日收益率: impor ...

  3. Gameframework之微信小游戏

    Gameframework之微信小游戏 这两天测试了一个Gameframework框架游戏及资源转微信小游戏,在这里记录一下踩过的坑,望避之! 材料: 小游戏Dome用的StarForce项目. 环境 ...

  4. VMware-查看虚拟机版本

    [root@localhost /]# uname -a Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22: ...

  5. C++容器map、unordered_map、set、unordered_set的区别

    1.map: 底层由红黑树实现. Key在红黑树中有序排列,对红黑树进行中序遍历即可得到Key从小到大的排序序列. 使用map可在O(1)的时间复杂度下快速查找到Key. 2.unordered_ma ...

  6. C6657子卡模块设计资料:268-基于FMC接口的DSP TMS320C6657子卡模块

    基于FMC接口的DSP TMS320C6657子卡模块 一. 概述        FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中都使用.该 ...

  7. [jQuery]判断页面是否滚动到底部

    方法1:判断可见高度+滚动高度是否等于内容高度 但经过测试UC.QQ.华为浏览器,这个方法不生效.(打印查因:可能由于屏幕缩放,可见高度和滚动高度会偏小. $(this).scroll(functio ...

  8. 设置导航栏的title

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAnd ...

  9. python批量将png图片转换为jpg图片

    参考引用链接如下:https://www.freesion.com/article/1866518882

  10. jmeter接口之json提取器应用

    在接口测试中有一个这样的场景:业务接口需要用到登录token:下个接口需要用到前个接口返回值作为参数,该怎么实现? 首先先看下登录.业务接口,本文用的jmeter版本为5.4.1 一.json提取器设 ...