From 8c575a2b7e4938aa3e7bb53cfd295d3b7245c84f Mon Sep 17 00:00:00 2001 From: firmianay Date: Sun, 6 Aug 2017 22:46:54 +0800 Subject: [PATCH] update gdb --- README.md | 1 + doc/2.2_gdb&peda.md | 42 ++++++++++++++++++++++++++++++++++++++++++ doc/5.2_pin.md | 1 + pic/2.2_gdb.png | Bin 0 -> 36762 bytes 4 files changed, 44 insertions(+) create mode 100644 doc/5.2_pin.md create mode 100644 pic/2.2_gdb.png diff --git a/README.md b/README.md index 219d377..060d806 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ - [五、高级篇](doc/5_advanced.md) - [5.1 Fuzz 测试](doc/5.1_fuzz.md) + - [5.2 Pin 动态二进制插桩](doc/5.2_pin.md) - [六、附录](doc/6_appendix.md) - [6.1 更多 Linux 工具](doc/6.1_Linuxtools.md) diff --git a/doc/2.2_gdb&peda.md b/doc/2.2_gdb&peda.md index f045bdf..84f7d8d 100644 --- a/doc/2.2_gdb&peda.md +++ b/doc/2.2_gdb&peda.md @@ -1 +1,43 @@ # 2.1 gdb 和 peda 调试器 + +- [gdb 的组成架构](#gdb-的组成架构) +- [gdb 基本工作原理](#gdb-基本工作原理) +- [gdb 基本操作](#gdb-基本操作) + + +## gdb 的组成架构 +![](../pic/2.2_gdb.png) + +## gdb 基本工作原理 +gdb 通过系统调用 `ptrace` 来接管一个进程的执行。ptrace 系统调用提供了一种方法使得父进程可以观察和控制其它进程的执行,检查和改变其核心映像以及寄存器。它主要用来实现断点调试和系统调用跟踪。ptrace 系统调用的原型如下: +```c +#include +long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); +``` +- **pid_t pid**:指示 ptrace 要跟踪的进程。 +- **void *addr**:指示要监控的内存地址。 +- **void *data**:存放读取出的或者要写入的数据。 +- **enum __ptrace_request request**:决定了系统调用的功能,几个主要的选项: + - *PTRACE_TRACEME*:表示此进程将被父进程跟踪,任何信号(除了 SIGKILL)都会暂停子进程,接着阻塞于 `wait()` 等待的父进程被唤醒。子进程内部对 `exec()` 的调用将发出 `SIGTRAP` 信号,这可以让父进程在子进程新程序开始运行之前就完全控制它。 + - *PTRACE_ATTACH*:attach 到一个指定的进程,使其成为当前进程跟踪的子进程,而子进程的行为等同于它进行了一次 PTRACE_TRACEME 操作。但需要注意的是,虽然当前进程成为被跟踪进程的父进程,但是子进程使用 `getppid()` 的到的仍将是其原始父进程的 pid。 + - *PTRACE_CONT*:继续运行之前停止的子进程。可同时向子进程交付指定的信号。 + +#### gdb 的三种调试方式 +- 运行并调试一个新进程 + - 运行 gdb,通过命令行或 `file` 命令指定目标程序。 + - 输入 `run` 命令, gdb 执行下面的操作: + - 通过 `fork()` 系统调用创建一个新进程 + - 在新创建的子进程中执行操作:`ptrace(PTRACE_TRACEME, 0, 0, 0)` + - 在子进程中通过 `execv()` 系统调用加载用户指定的可执行文件 +- attach 并调试一个已经运行的进程 + - 用户确定需要进行调试的进程 PID + - 运行 gdb,输入 `attach `,gdb 将对指定进程执行操作:`ptrace(PTRACE_ATTACH, pid, 0, 0)` +- 远程调试目标机上新创建的进程 + - gdb 运行在调试机上,gdbserver 运行在目标机上,两者之间的通信数据格式由 gdb 远程串行协议(Remote Serial Protocol)定义 + - RSP 协议数据的基本格式为: `$..........#xx` + - gdbserver 的启动方式相当于运行并调试一个新创建的进程 + +#### 断点的实现 +断点的功能是通过内核信号实现的,在 x86 架构上,内核向某个地址打入断点,实际上就是往该地址写入断点指令 `INT 3`,即 `0xCC`。目标程序运行到这条指令之后会触发 `SIGTRAP` 信号,gdb 捕获这个信号,并根据目标程序当前停止的位置查询 gdb 维护的断点链表,若发现在该地址确实存在断点,则可判定为断点命中。 + +## gdb 基本操作 diff --git a/doc/5.2_pin.md b/doc/5.2_pin.md new file mode 100644 index 0000000..915a9e2 --- /dev/null +++ b/doc/5.2_pin.md @@ -0,0 +1 @@ +# Pin 动态二进制插桩 diff --git a/pic/2.2_gdb.png b/pic/2.2_gdb.png new file mode 100644 index 0000000000000000000000000000000000000000..abba35b56518d3eb384a2090360329fda4a1c62b GIT binary patch literal 36762 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