diff --git a/doc/2.2_gdb.md b/doc/2.2_gdb.md index c45fe43..55e8684 100644 --- a/doc/2.2_gdb.md +++ b/doc/2.2_gdb.md @@ -7,6 +7,7 @@ - [gdb 基本操作](#gdb-基本操作) - [gdb-peda](#gdb-peda) - [GEF/pwndbg](#gefpwndbg) +- [参考资料](#参考资料) ## gdb 的组成架构 @@ -219,6 +220,19 @@ run `python2 -c 'print "A"*100'` 参数可以是由 `typedef` 定义的类型名, 或者 `struct STRUCT-TAG` 或者 `class CLASS-NAME` 或者 `union UNION-TAG` 或者 `enum ENUM-TAG`。 +#### set follow-fork-mode +当程序 fork 出一个子进程的时候,gdb 默认会追踪父进程(`set follow-fork-mode parent`),但也可以使用命令 `set follow-fork-mode child` 让其追踪子进程。 + +另外,如果想要同时追踪父进程和子进程,可以使用命令 `set detach-on-fork off`(默认为`on`),这样就可以同时调试父子进程,在调试其中一个进程时,另一个进程被挂起。如果想让父子进程同时运行,可以使用 `set schedule-multiple on`(默认为`off`)。 + +但如果程序是使用 exec 来启动了一个新的程序,可以使用 `set follow-exec-mode new`(默认为`same`) 来新建一个 inferior 给新程序,而父进程的 inferior 仍然保留。 + +#### info threads +打印出所有线程的信息,包含 Thread ID、Target ID 和 Frame。 + +#### thread apply all bt +打印出所有线程的堆栈信息。 + ## gdb-peda 当 gdb 启动时,它会在当前用户的主目录中寻找一个名为 `.gdbinit` 的文件;如果该文件存在,则 gdb 就执行该文件中的所有命令。通常,该文件用于简单的配置命令。但是 `.gdbinit` 的配置十分繁琐,因此对 gdb 的扩展通常用插件的方式来实现,通过 python 的脚本可以很方便的实现需要的功能。 @@ -467,3 +481,8 @@ http://ropshell.com/peda/ 除了 PEDA 外还有一些优秀的 gdb 增强工具,特别是增加了一些查看堆的命令,可以看情况选用。 - [GEF](https://github.com/hugsy/gef) - Multi-Architecture GDB Enhanced Features for Exploiters & Reverse-Engineers - [pwndbg](https://github.com/pwndbg/pwndbg) - Exploit Development and Reverse Engineering with GDB Made Easy + + +## 参考资料 +- [Debugging with GDB](https://sourceware.org/gdb/onlinedocs/gdb/) +- [100个gdb小技巧](https://github.com/hellogcc/100-gdb-tips)