GDB调试

逆向笔记 · 03-21 · 120 人浏览

一、常用快捷键

命令 简写形式 说明
backtrace bt、where 显示backtrace
break b 设置断点
continue c、cont 继续执行
delete d 删除断点
finish 运行到函数结束
info breakpoints 显示断点信息
next n 执行下一行
print p 显示表达式
run r 运行程序
step s 一次执行一行,包括函数内部
x 显示内存内容
until u 执行到指定行
其他命令
directory dir 插入目录
disable dis 禁用断点
down do 在当前调用的栈帧中选择要显示的栈帧
edit e 编辑文件或者函数
frame f 选择要显示的栈帧
forward-search fo 向前搜索
generate-core-file gcore 生成内核转存储
help h 显示帮助一览
info i 显示信息
list l 显示函数或行
nexti ni 执行下一行(以汇编代码为单位)
print-object po 显示目标信息
sharelibrary share 加载共享的符号
stepi si 执行下一行

二、PEDA

PEDA - 针对GDB的Python漏洞利用开发协助

主要特点:

增强gdb的显示:在调试过程中着色并显示反汇编代码,寄存器和内存信息。
添加命令以支持调试和利用开发(有关命令的完整列表,请使用peda help):
aslr - 显示/设置GDB的ASLR设置
checksec - 检查二进制的各种安全选项
dumpargs - 显示在调用指令处停止时传递给函数的参数
dumprop - 将所有ROP小工具转储到特定的内存范围内
elfheader - 从调试的ELF文件中获取标头信息
elfsymbol - 从ELF文件中获取非调试符号信息
lookup - 搜索属于内存范围的地址的所有地址/引用
patch - 补丁内存从字符串/ hexstring / int开始
pattern - 生成,搜索或写入循环模式到内存
procinfo - 显示来自/ proc / pid /的各种信息
pshow - 显示各种PEDA选项和其他设置
pset - 设置各种PEDA选项和其他设置
readelf - 从ELF文件中获取标头信息
ropgadget - 获取二进制或库的常见ROP小工具
ropsearch - 在内存中搜索ROP小工具
searchmem|find - 在内存中搜索模式; 支持正则表达式搜索
shellcode - 生成或下载常见的shellcode。
skeleton - 生成python漏洞利用代码模板
vmmap - 在调试过程中获取部分的虚拟映射地址范围
xormem - 使用密钥对存储区域进行异或

安装

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
echo "DONE! debug your program with gdb and enjoy"

GDB-peda调试总汇

break *0x400100 (b main):在 0x400100 处下断点

tb一次性断点

info b:查看断点信息

delete [number]:删除断点

watch (int )0x08044530:在内存0x0804453处的数据改变时stop

x /4xg $ebp:查看ebp开始的4个8字节内容(b:单字节,h:双字节,w:四字节,g:八字节;x:十六进制,s:字符串输出,i:反汇编,c:单字符)

p $eax:输出eax的内容

set $eax=4:修改变量值

c:继续运行

r:重新开始运行

ni:单步步过

si:单步步入

fini:运行至函数刚结束处

return expression:将函数返回值指定为expression

bt:查看当前栈帧

info f:查看当前栈帧

context:查看运行上下文

stack:查看当前堆栈

call func:强制函数调用

ropgagdet:找common rop

vmmap:查看虚拟地址分布

shellcode:搜索,生成shellcode

ptype struct link_map:查看link_map定义

p &((struct link_map*)0)->l_info:查看l_info成员偏移

逆向 GDB 动态调试
Theme Jasmine by Kent Liao