gdb调试
TAB:显示所有命令

start:运行到程序入口处
run:运行完整个程序
🔍 x 命令的基本语法:
x/nfs address
n:要显示的内存单元个数(默认是 1)。f:显示格式(format),比如十六进制、十进制、字符串等。s:内存单元大小(size),比如字节、半字、字等。address:要查看的内存地址(可以是变量名、寄存器、指针表达式等)。
f:输出格式(format)
x |
Hex(十六进制) |
d |
Decimal(十进制) |
u |
Unsigned decimal |
o |
Octal(八进制) |
t |
Binary(二进制) |
f |
Floating point(浮点数) |
a |
Address(地址,显示指针) |
i |
Instruction(反汇编指令) |
c |
Char(字符) |
s |
String(字符串) |
s:内存单元大小(size)
b |
byte(字节) | 1 字节 |
h |
halfword(半字) | 2 字节 |
w |
word(字) | 4 字节 |
g |
giant word(双字) | 8 字节 |
🧠 示例用法
1.查看地址 0x7fffffffe000 处的 4 个 4 字节数值,以十六进制显示:
1 | x/4wx 0x7fffffffe000 |
输出
1 | 0x7fffffffe000: 0x00000001 0x00007fff 0x00000000 0x00000000 |
2. 查看地址 0x400500 处的 5 条汇编指令:
1 | x/5i 0x400500 |
输出
1 | 0x400500: push %rbp |
3. 查看栈顶指针 rsp 地址的内容(以 8 字节为单位,显示为十六进制):
1 | x/gx $rsp |
输出
1 | x/gx $rsp |
4. 查看地址 0x7fffffffe010 开始的字符串:
1 | x/s 0x7fffffffe010 |
输出
1 | 0x7fffffffe010: "Hello, world!" |
5.查看地址 0x601038 的 10 个字节,以十进制形式显示:
1 | x/10db 0x601038 |
输出
1 | 0x601038: 72 101 108 108 111 44 32 119 111 114 |
:small_airplane:接收数据
| 函数 | 说明 |
|---|---|
recvall() |
接收所有数据直到 EOF |
recvline() |
接收一行(以\n结尾) |
recvuntil(delim) |
接收数据直到遇到指定分隔符(如"Welcome!") |
recvregex(regex) |
接收数据直到匹配正则表达式 |
recv(n) |
接收指定字节数的数据(阻塞直到收到 n 字节) |