gdb 常用命令

GDB 常用命令指南

1. GDB

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# 启动调试程序,其中带有传入的参数
run <arg1> <arg2> ... # 简写 r
# 先前如果已经执行过 run <arg1> <arg2> .. 指令后,重新执行时只需直接执行 run 即可。

# 重复上一条指令
按下[Enter]键

# 单步步过
nexti # 汇编层面,简写 ni
next # 源代码层面,简写 n

# 单步步入
stepi # 汇编层面,简写 si
step # 源代码层面,简写 s

# 执行到返回
finish # 简写 fini

# 强制函数直接返回(几乎不用)
return # 简写 ret

# 查看所有设置的端点
info break # 简写 info b

# 删除端点
del <break num>

# 启动/禁用断点
enable breakpoints
disable breakpoints

# 查看某个寄存器的值
print $rdi # print 简写 p

# 设置某个寄存器的值
set $rdx = 0x10

# 设置内存上某个地址的值
set {int}0x83040 = 4

# 查看栈上的值
# 传入的参数为显示的栈数据个数
stack 20

# 在某个地址上下断点(无参数时默认在$rip处下断)
b *0x400123 # b 是 break 的简写
b <line_number> # 在当前源码文件中的第line_number行下断点
b <file_name>:<line_number> # 在<file_name>源码文件中的第line_number行下断点
# 临时断点(只生效一次
tb *0x400123 # 全称 temp break
# 条件断点
b *0x400123 if a == 100
# 忽略特定断点cnt次
ignore 断点编号i cnt

# 输出got表相关信息
got

# 输出某个函数在libc上的地址
print system

# 开启/关闭ASLR
aslr off

# 显示当前进程空间内存分布
vmmap

# 显示内存上的值
# 格式:
# d 按十进制格式显示变量。
# u 按十六进制格式显示无符号整型。
# o 按八进制格式显示变量。
# t 按二进制格式显示变量。
# a 按十六进制格式显示变量。
# c 按字符格式显示变量。
# f 按浮点数格式显示变量。
# 大小:
# b 一单元1字节
# h 一单元2字节
# w 一单元4字节
# g 一单元8字节
x/3uh 0x54320 # 以地址0x54320为起始地址,返回3个单元的值,每个单元有两个字节,输出格式为无符号十六进制。

# 切换线程
thread <id> # 切换至对应ID的线程
info thread # 查看当前进程中的所有线程信息

# 退出gdb
quit # 简写 q

# 选择父进程fork后的跟踪对象
set follow-fork-mode parent # fork后跟踪父进程
set follow-fork-mode child # fork后跟踪子进程

# 启动Ttext UI
help tui # 查看tui的相关命令
tui register general # 启动TUI时附带寄存器窗口
tui enable # 启动TUI
tui disable # 退出TUI

# 在GDB中直接调用源码中的某个函数
# 这个语句通常对于大型项目中,执行特定类型的Print()函数很有用
call <expr>

# 环境变量相关
show environment [key] # 显示环境变量
set environment <key>=<val> ... # 添加环境变量
unset environment [key] # 清空环境变量

# signal 相关
info signal / info handle # 查看 signal 设置
# operation如下:
# - no stop
# 当被调试的程序收到信号时,GDB不会停住程序的运行,但会打出消息告诉你收到这种信号。
# - stop
# 当被调试的程序收到信号时,GDB会停住你的程序。
# - print
# 当被调试的程序收到信号时,GDB会显示出一条信息。
# - noprint
# 当被调试的程序收到信号时,GDB不会告诉你收到信号的信息。
# - pass / noignore
# 当被调试的程序收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程序会处理。
# - nopass / ignore
# 当被调试的程序收到信号时,GDB不会让被调试程序来处理这个信号。
handle <SIG> <operation>

2. Pwndbg 插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 针对PIE程序高效下断
b * $rebase(offset)

# 显示当前堆内chunks
heap

# 显示bins
bins

# 显示main_arena
p main_arena

# 显示canary
canary

# 显示堆的布局
vis_heap_chunks

3. Peda 插件

1
2
3
4
5
# 栈溢出时,计算当前栈帧的高度
# 生成特殊字符串
pattern create 70
# 计算相对偏移(传入的address为$rip出错地址)
pattern offset address
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2021 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~