update 2.2_gdb

This commit is contained in:
firmianay 2018-02-04 11:41:29 +08:00
parent cab884d01c
commit 3f36379896

View File

@ -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)