gdb 的配置、插件plugin与多彩显示

gdb可以使用python来进行配置,为自动化调试与格式化显示提供非常方便的功能,具体可以自行搜索。加载了以下介绍的界面程序,还是可以在gdb运行的时候继续加载自己定义的python插件脚本,只要自己的脚本不设计到界面定义就行,不然界面会乱。因此,用下面的插件,就不能用gdbtui了,不然界面就变了,虽然gdbtui也非常好用。其实,用了gdb-dashboard就基本可以不用tui了,因为tui就只有一个自动显示source的功能,这个功能gdb-dashboard也有。

 

对于 lldb,可以参考 https://github.com/snare/voltron ,  Voltron is an extensible debugger UI toolkit written in Python. It aims to improve the user experience of various debuggers (LLDB, GDB, VDB and WinDbg) by enabling the attachment of utility views that can retrieve and display data from the debugger host.

 

 

gdb还有一些开源的配置插件,都是在 ~/.gdbinit 里直接写代码,或间接加载代码 ( 如 source /home/hzh/disk2/github/pwndbg/gdbinit.py 或 sourc /home/hzh/disk2/github/gdb-dashboard/.gdbinit)。这些开源插件如下,按我最喜欢的优先级进行排序:

1、gdb-dashboard

https://github.com/cyrus-and/gdb-dashboard

它主要是能自动显示很多彩色的窗口,支持简单的代码语法高亮,我最喜欢的功能就是它可以设置在不同的tty里显示不同的窗口(后来发现gef也可以,即gef config context.redirect,所以gef应该排第一了),这个功能让我把它排第一。

请注意,它的源代码窗口最大只能显示10行代码(就算在全新的窗口显示也是这样),我们可以通过修改它的配置文件来让它满屏显示:

dashboard source -style height 40

其中40就是终端的最大行数,可以用:

tput lines

得到,但是我们一般将得到的数值减去2,避免屏幕溢出。

附加:

其实gdb-dashboard配置代码里的:

try:
    width, height = Dashboard.get_term_size(fd)                                                                                                                       
except:
    width, height = Dashboard.get_term_size()

是可以得到终端的长宽的。

2、gef

https://github.com/hugsy/gef

它需要本机安装有 pyenv (一个管理python版本的软件)。但是可以手动将其改掉,就是将它的 gef.py 里的 site_packages_dir 直接改称自己的python site_packages 目录,可以这样得到:

$  python -c 'import site; print(site.getsitepackages())'

改变source code 显示窗的高度:   gef config 可以打印和配置所有的配置选项,要打印某条配置的帮助直接敲入如 gef config context.redirect。另如: gef config context.nb_lines_code 25  可以配置source code窗口的大小,配置后不用重启,直接敲 context 就可以更新显示。

配置窗体的显示或隐藏:  全部显示:  gef config context.layout "legend regs stack code args source memory threads trace extra", 部分显示只需要删掉其中一些就行了,其中的code是说的汇编代码。一般调试主要使用 gef config context.layout "-legend -regs stack -code args source memory threads trace extra"

  • legend : a text explanation of the color code
  • regs : the state of registers
  • stack : the content of memory pointed by $sp register
  • code : the code being executed
  • args : if stopping at a function calls, print the call arguments
  • source : if compiled with source, this will show the corresponding line of source code
  • threads : all the threads
  • trace : the execution call trace
  • extra : if an automatic behavior is detected (vulnerable format string, heap vulnerability, etc.) it will be displayed in this pane
  • memory : peek into arbitrary memory locations

如果你只想临时显示某个contex窗口,则在gef命令行键入: context regs

Redirecting context output to another tty/file (将显示重定向到单独的tty,参考文档:https://gef.readthedocs.io/en/master/commands/context/):

先查找你窗口的tty:      $ tty         输出为 /dev/pts/x

然后在gef命令行键入:      gef config context.redirect /dev/pts/x          如果想要回归正常则键入:     gef config context.redirect ""

 

 

若gef运行在tmux环境里,它的 tmux-setup 命令能将自己的界面split成左右两半,左边只输入命令,右边是context窗口,这样可以实现gdb(及gef)命令与显示窗体分离,比较清爽。

文档:

https://gef.readthedocs.io/en/master/

3、PwnDbg

https://github.com/pwndbg/pwndbg

它不需要安装pyenv,但还是将它排在gef的后面,因为gef实在是轻巧且配置灵活,其实它们都差不多,都是主要调试二进制文件的(破解?),方便查看heap,stack及内存的值等,打印出来阅读方便。

修改source code显示行数的方法:

在配置文件搜索 context-source-code-lines 或 source_code_lines,将里面的10改称你要的,需要重启。

可以在调试的时候使用 config source 或 config tty来获取帮助,这只是获取帮助,没有在线配置功能,智能改配置文件然后重启。

每次刷新主显示窗口,敲 context 就可以。

文档:

https://browserpwndbg.readthedocs.io/en/docs/

4、radare2

https://github.com/radareorg/radare2

主要拿来做逆向工程用的,二进制文件分析。

5、peda

https://github.com/longld/peda

和PwnDbg及gef差不多,但是代码很久没更新了。

6、Gdbinit

https://github.com/gdbinit/Gdbinit

就是一般的gdb彩色显示配置,功能简单,入门级。

 

 

最后,gdb-dashboard、PwnDbg、gef、radare2、peda、Gdbinit 的自动切换,其实就是切换配置文件:

先把他们全部装上,当然你可以选择自己感兴趣的安装,他们的配置都需要通过 ~/.gdbinit 来配置,因此他们是互斥的,配置里只能配置一种,但是可以用下面的这种方法解决,下面的示例只写了 peda、PwnDbg和gef,其它自己加。

1、Open your .gdbinit file, delete any contents and paste the following configuration:

define init-peda
source ~/peda/peda.py
end
document init-peda
Initializes the PEDA (Python Exploit Development Assistant for GDB) framework
end

define init-pwndbg
source ~/.gdbinit_pwndbg
end
document init-pwndbg
Initializes PwnDBG
end

define init-gef
source ~/.gdbinit-gef.py
end
document init-gef
Initializes GEF (GDB Enhanced Features)
end

Then, create the following 3 files in one of your $PATH folder:

First create a file named by gdb-peda and paste the following:

#!/bin/sh
exec gdb -q -ex init-peda "$@"

Then gdb-pwndbg:

#!/bin/sh
exec gdb -q -ex init-pwndbg "$@"

Then gdb-gef:

#!/bin/sh
exec gdb -q -ex init-gef "$@"

最后修改它们的可执行权限:

chmod +x /usr/bin/gdb-*

然后你就可以使用 gdb-peda, gdb-pwndbg 或 gdb-gef 来运行相应的gdb plugin版了。

 

posted @ 2020-11-11 15:00  微信公众号--共鸣圈  阅读(1977)  评论(0编辑  收藏  举报