GDB
流程控制
命令功能 | 命令 | 简写 |
---|---|---|
重新运行调试的程序 | run | r |
继续运行 | continue | c |
执行下一步 | next | n |
执行N次下一步 | next N | n N |
执行上次执行的命令 | [Enter] | |
单步进入 | step | s |
执行完当前函数返回到调用它的函数 | finish | f |
指定程序直到退出当前循环体 | until | u |
强制返回当前函数将会忽略当前函数还没有执行完毕的语句,强制返回。 return后面可以接一个表达式,表达式的返回值就是函数的返回值。 |
return | |
在当前的文件中某一行(假设为6)设定断点 | break 6 | b |
类似于`run,停在main函数的开始 | start |
断点设置
- break 函数名或者 * 0x地址
PIE保护下断点
b *$rebase(0x地址)
打印Print
命令功能 | 命令 | 简写 |
---|---|---|
打印变量的值 | print var | |
打印变量的地址 | print &var | |
print /x var |
print /x var中x的含义 | print /x var中x的选择 |
---|---|
按十六进制格式显示变量 | x |
按十进制格式显示变量 | d |
按十六进制格式显示无符号整型 | u |
按八进制格式显示变量 | o |
按二进制格式显示变量 | t |
按十六进制格式显示变量 | a |
按字符格式显示变量 | c |
按浮点数格式显示变量 | f |
内存显示
x /<n/f/u>
例如:x /10dw arr
n 显示的长度
f 表示显示的格式 | f的选择 |
---|---|
按十六进制格式显示变量 | x |
按十进制格式显示变量 | d |
按十六进制格式显示无符号整型 | u |
按八进制格式显示变量 | o |
按二进制格式显示变量 | t |
按十六进制格式显示变量 | a |
按字符格式显示变量 | c |
按浮点数格式显示变量 | f |
u 表示的字节方式 | u的选择 |
---|---|
表示单字节 | b |
表示双字节 | h |
表示四字节 | w |
表示八字节 | g |
其他
x/s addr 查看addr处的字符串
x/b addr 查看addr处的字符
x/i addr 查看addr处的反汇编结果
x/10wx
x/10gx
查看寄存器
- i r [a]|[eax]
修改寄存器
- set $eax=0x11
修改地址内容
无符号 | 修改字节数 |
---|---|
set {unsigned char}地址 =值 | 一个字节 |
set {unsigned short}地址 =值 | 两个字节 |
set {unsigned int}地址 =值 | 四个字节 |
set {unsigned long long}地址 =值 | 八个字节 |
有符号 | 修改字节数 |
---|---|
set {char}地址 =值 | 一个字节 |
set {short}地址 =值 | 两个字节 |
set {int}地址 =值 | 四个字节 |
set {long long}地址 =值 | 八个字节 |
- 或者set (类型)
=
调试技巧
方案一
启动程序之后,再用gdb调试
gdb attch
python中pause()进行中断
方案二
在python中gdb.attach(p,'command') 如:gdb.attach(p,'b *地址')
堆相关指令
查看分配的堆 | heap [-h] [-v] [-s] [addr] (chunk头开始) |
查看各种bins | bins [addr] |
16进制查看 | hexdump 地址 显示的字节数 |
查看各个bins的情况 | heapinfo (常用) |
查看堆的基地址 | heapbase |
查看用户使用的堆的使用情况 | parseheap (chunk头开始)(par简写)(常用) |
查看chunks内存 | vis_heap_chunks |
查找fake_chunks | find_fake_fast &main_arena |
查看栈信息
含义 | 指令 |
---|---|
打印当前函数参数和对应值 | info args |
打印当前函数局部变量和对应值 | info locals |
打印详细的栈信息,主要以程序的虚拟地址信息为主 | info frame |
向栈的下面移动n层 | down [n] |
向栈的上面移动n层 | up [n] |
打印当前调用栈的信息,n可正可负。 表示只打印栈顶上n层的栈信息或栈底n层信息。 |
backtrace [n] |
其他指令
指令含义 | 指令 | 简写 |
---|---|---|
显示当前gdb断点信息 | info breakpoints | info b |
反汇编该函数或地址 | disassemble 函数名或地址 | disass |
用栈的方式查看 | telescope 地址 | tele |
查看区段 | vmmap | |
搜索字符串 | searchmem 字符串 | |
查看子命令帮助 | help x | |
转换为intel格式 | set disassembly-flavor intel | |
转换为att格式 | set disassembly-flavor att | |
查看符号地址 | info address 符号 | |
查看puts的got表地址 | info address [email protected] | |
查看libc中system函数地址 | info address system | |
查看内存映射 | info proc mappings |