pwntools是一个挺好用的工具,不过当我尝试在远程调试代码的时候,会遇到调试窗口默认找不到的情况,于是找到了使用tmux作为解决方案,但是tmux没办法很方便的用滚轮翻页,使用起来不是很方便查看内容,再加上tmux的窗格功能让我想要将内容分散到各个地方。一番搜索之后发现splitmind这个项目很合适,gdb调试的时候很方便。但是代码进入的时候与程序交互的那个窗口自己占了一半,让我本就不宽阔的空间更加拥挤。又一番搜索之后发现现在可以在创建窗格的时候直接控制比例了,又发现pwntools可以设置调试时使用的终端命令及参数。于是最终也是把调试窗口变成了自己希望的样子。如下
tmux配合pwndbg调试,及美化
代码调试
调试的时候先进入tmux,然后使用gdb.attach(sh)
进入调试就好。
美化
最初是根据这篇文章开始的美化,推荐都去看一下。[分享] pwndbg+tmux真乃天作之合
事已至此,分享一下我的配置文件吧
# ~/.gdbinit文件内容
source ~/.pwndbg/gdbinit.py
source ~/.splitmind/gdbinit.py
set context-clear-screen on
set follow-fork-mode parent
python
import splitmind
(splitmind.Mind()
.tell_splitter(show_titles=True)
.below(display="regs")
.right(display="stack", cmd="grep rax", use_stdin=True,size="70%")
.below(display="backtrace")
.right(cmd='sleep 1; htop')
.right(of="main", display="legend")
.show("disasm", on="legend")
).build(nobanner=True)
end
set context-code-lines 15
set context-source-code-lines 15
set context-sections "regs args code disasm stack backtrace"
因为后续窗格的分配都是splitmind项目的简单应用,关于该项目如何使用,请自行搜索github
配置好之后gdb直接进调试是这样子的
这个看起来挺不错的,但是一旦从pwntools里进去就完蛋
进入调试时窗格设置比例
搜了一下,发现pwntools可以指定terminal参数,详见:传送门
$ context.terminal = ['tmux', 'splitw', '-h']
我看到的例子是用来设置调试窗口的窗格,省的弹出来个新窗口。
然后找到了tmux现在的命令可以在创建窗格的同时设置比例了,详见tmux如何设置比例,下面是一个例子
$ tmux splitw -h -l 66%
然后我把命令一替换,问题就这样轻松地解决了。