gdb 常用命令总结
安装插件
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
最新文章
- shell实现https登录
- [转]使用Cadence ADE + Spectre做Montel Carlo仿真
- TCP通讯程序设计---5
- 百度,你家云管家能靠谱点不?替你脸红!Shame on you!
- 学习面试题Day05
- android学习——eclipse的svn的搭建
- JavaScript 客户端JavaScript之cookie和客户端持久性
- poj1182(并查集)
- JS 数组及函数
- c#全宇宙最牛的编程软件
- R-CNN算法概要
- 苹果手机iOS11中fixed弹出框中input光标错位问题
- js 调用后台,后台调用js
- robot framework---时间控件取值
- HBuild 连接苹果手机
- redis-缓存失效三种策略(FIFO 、LRU、LFU)
- 导入Unity插件时出现Failed to import package with error: Couldn&#39;t decompress package
- MySQL笔记(3)---文件
- gcc gdb调试 (三)
- Message: dlopen failed for module ‘x’: file not found
热门文章
- yak远程服务端搭
- 洛谷 P6021 洪水
- FTCL:Fine-grained Temporal Contrastive Learning for Weakly-supervised Temporal Action Localization概述
- vue 利用xlsx、xlsx-style、file-saver实现前端导出excel表格 (包括设置单元格居中、边框等样式) antdesignvue、elementui、vxetable 等都适用
- html添加公共文件
- 【剑指Offer】【数组】数组中出现次数超过一半的数字
- SAP 交货单抬头客制化界面以及字段
- 在sublime text 3中编译javascript
- react项目--redux封装
- 「SOL」网络流flow (模拟赛)