Gdb 常用命令

pwndbg + pwngdb + angelheap

Gdb 原生命令

  • c = continue
    • ctrl-c 取消
  • ni = step 汇编级 n = step C语言级
  • si = stepi
  • b = break
    • 添加地址断点,当运行到端点会停下来
    • 用 delete,disable,enable 修改断点
  • watch
    • 添加变量断点
    • watch <expression> 当变量改变时会停下来
    • watch -l <address> 当地址指向的变量改变时会停下来
    • rwatch -l <address> 当地址指向的变量被读取时会停下来
    • watch var if xxx 添加条件
  • x/<n/f/u> <addr>
    • 打印内存地址中的值
    • n 表示内存单元个数
    • f 表示输出格式
      • i 汇编
      • t 二进制格式
      • o 八进制格式
      • d 十进制有符号整型
      • u 十进制无符号整型
      • x 十六进制,补齐前缀 0
      • a 十六进制,不补齐
      • f 浮点数
      • c 字符
      • s 字符串
    • u 表示内存单元大小
      • 默认为机器字大小
      • b 表示单字节
      • h 表示双字节
      • w 表示四字节
      • g 表示八字节
  • p/<n/f/u> = print
    • 打印
    • p *(struct elfhdr*) 0x10000
    • p *argv@argc
      • 打印参数
  • info
    • info registers
      • 查看寄存器
    • info frame
      • 查看当前栈帧信息
    • info breakpoints
      • 查看断点
    • info locals
      • 查看本地变量
    • info args
      • 查看函数参数
  • frame <n>
    • 跳转到上层栈帧,配合 i frame 使用
  • list <location>
    • 打印地址对应的函数的源代码
  • bt = backtrace
    • 查看所有栈帧信息
  • layout split
    • 进入分离模式,可以查看当前运行的源码和反汇编
    • Ctrl+x, a 退出 layout 模式
  • up & down
    • 进入上 & 下一级函数
  • set
    • 修改变量或寄存器的值
    • set var $pc=0x3ffffff000

回溯调试

  • record
    • 开始记录进程状态
  • reverse-*
    • 加上一些常用的命令,可实现反向运行
    • 如 reverse-nexti,reverse-finish

Pwndbg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
parseheap
# 查看堆中使用情况

pwndbg> parseheap
addr prev size status fd bk
0x603000 0x0 0x290 Used None None
0x603290 0x0 0x20 Used None None


bins
# 查看 bin 中情况

pwndbg> bins
tcachebins
0x20 [ 1]: 0x6032c0 ◂— 0x0
fastbins
0x20: 0x0
0x30: 0x0
0x40: 0x0
0x50: 0x0
0x60: 0x0
0x70: 0x0
0x80: 0x0
unsortedbin
all: 0x0
smallbins
empty
largebins
empty

vis

pwndbg>

Angelheap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
chunkinfo + chunkheader address

pwndbg> chunkinfo 0x603000
==================================
Chunk info
==================================
Status : Used
Freeable : True
prev_size : 0x0
size : 0x290
prev_inused : 1
is_mmap : 0
non_mainarea : 0


chunkptr + chunkdata address

pwndbg> chunkptr 0x603010
==================================
Chunk info
==================================
Status : Used
Freeable : True
prev_size : 0x0
size : 0x290
prev_inused : 1
is_mmap : 0
non_mainarea : 0


heapinfo
查看堆的情况

pwndbg> heapinfo
(0x20) fastbin[0]: 0x0
(0x30) fastbin[1]: 0x0
(0x40) fastbin[2]: 0x0
(0x50) fastbin[3]: 0x0
(0x60) fastbin[4]: 0x0
(0x70) fastbin[5]: 0x0
(0x80) fastbin[6]: 0x0
(0x90) fastbin[7]: 0x0
(0xa0) fastbin[8]: 0x0
(0xb0) fastbin[9]: 0x0
top: 0x6032d0 (size : 0x20d30)
last_remainder: 0x0 (size : 0x0)
unsortbin: 0x0
(0x20) tcache_entry[0](1): 0x6032c0
作者

Humoooor

发布于

2022-10-17

更新于

2023-12-14

许可协议

评论