pwndbg是什么?
pwndbg是一个用于GDB的插件,旨在帮助进行漏洞利用和CTF挑战的动态调试工具。它提供了一系列的功能和命令,可以帮助我们更方便地进行动态调试。同时,pwndbg也是一个开源工具,可以在GitHub上找到并自由使用。
安装
pwndbg插件可以通过GitHub下载和安装。首先,需要将插件克隆到本地:
git clone https://github.com/pwndbg/pwndbg
然后,在GDB中加载pwndbg插件:
source /path/to/pwndbg/gdbinit.py
使用
pwndbg的使用方式与GDB类似,我们可以用它来进行动态调试
步骤如下:
1.编译
首先需要编译目标二进制文件,确保在编译时开启调试信息。例如,使用gcc编译:
gcc -g -o target target.c
2.启动pwndbg
在终端中输入以下命令启动pwndbg
gdb -q target
这将启动GDB并自动加载pwndbg插件。接下来,附加到目标二进制文件:
attach $(pgrep target)
3.开始调试
现在可以开始使用pwndbg进行动态调试。以下是一些常用的命令:
- break:
- 设置断点。
- run:
- 启动程序。
- continue:
- 继续执行程序。
- next:
- 单步执行程序,跳过函数调用。
- step:
- 单步执行程序,进入函数调用。
- backtrace:
- 显示函数调用栈。
- info:
- 显示程序信息,例如变量值、寄存器值、内存地址等。
- x:
- 显示内存中的内容。
- set:
- 设置变量的值。
(偷偷说一下在GDB中绝大多数指令输入首字母即可就比如:设置断点break可以写成b);
以下是一个示例:
b main
Breakpoint 1 at 0x400516
r
Starting program: /path/to/target
Breakpoint 1, 0x0000000000400516 in main ()
next
x/16x $rsp
0x7fffffffe438: 0x00007fffffffe558 0x0000000000400547
0x7fffffffe448: 0x0000000000000000 0x00007fffffffe4f8
0x7fffffffe458: 0x00007fffffffe4f8 0x0000000000400400
0x7fffffffe468: 0x00007ffff7a0c830 0x00007fffffffe540
0x7fffffffe478: 0x0000000000400526 0x0000000000000000
0x7fffffffe488: 0x0000000000000000 0x0000000000400400
0x7fffffffe498: 0x00000000004004c0 0x00007ffff7dd90b3
0x7fffffffe4a8: 0x0000000000000001 0x00007fffffffe540
set $rax = 0xdeadbeef
continue
以上示例中,我们设置了一个断点并启动程序,使用next命令单步执行程序,然后使用x命令查看堆栈内容,使用set命令设置寄存器值,最后使用continue命令继续执行程序。
以下是一些其他的命令:
- context:
- 显示当前上下文信息,包括寄存器值、堆栈信息和内存映射等。
- heap:
- 显示堆信息,包括堆块的大小、地址和状态等。
- telescope:
- 显示一段内存区域的内容。
- ropgadget
- 显示二进制文件中可用的ROP gadget。
- search:
- 在内存中搜索指定的字符串或模式。
- asm:
- 将汇编指令转换成机器码。
- breakpoints:
- 显示断点信息。
- vmmap:
- 显示进程的虚拟内存映射。
- pattern:
- 生成用于缓冲区溢出的模式字符串。
Ok啊,差不多就总结这么多。