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
126
127
128
129
130
131
132
133
134
135
# 启动调试程序,其中带有传入的参数
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/exec后的跟踪对象
set follow-fork-mode parent/child # fork后跟踪父进程/子进程
set follow-exec-mode new/same # 使用开启新 inferior 来跟踪exec程序
set set detach-on-fork on/off # 是否同时调试fork后的两个程序

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

# 启动layout UI
help layout # 查看 layout 的相关命令
layout src # 显示源代码窗口
layout asm # 显示汇编窗口
layout regs #显示源代码/汇编和寄存器窗口
layout split # 显示源代码和汇编窗口
layout next # 显示下一个layout
layout prev # 显示上一个layout

# 在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
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~