GDB调试指令

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> |$esp

例如: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 puts@got.plt
查看libc中system函数地址 info address system
查看内存映射 info proc mappings
posted @ 2024-03-31 09:25  noahze  阅读(38)  评论(0编辑  收藏  举报