项目地址:https://github.com/AlEscher/pwndbg-gui
本来是想自己做一个GUI的结果发现有人做了😭,fork过来看看代码,然后准备看着加点功能.
从readme中可以看到是用的Qt6做的GUI,然后使用的接口是pygdbmi,这个库的作用是提供格式化的gdb的python交互,格式化了gdb输出的数据,并且提供接口与gdb交互.程序将gdb的输出分割成了数个界面,可以让你同时观察到堆,栈,反汇编,如果有ida拓展的话应该还能看到源代码,并且还提供了对寄存器的监视.对执行流控制的常用命令做了按钮来快速操作,虽然对于经常用gdb的来说便利不大甚至有些别扭,但是gdb新手还是可以尝试一下这个项目的
↑作者放的界面截图,如果自己clone之后里面没有code是因为没有IDA扩展
进入start.py中可以看到其主要执行的代码会在pwndbg_gui.py中,另外还有个custom_widget文件夹值得注意,与执行的窗口对比一下很容易发现这个里面是小窗口的实现样式,这里不再做更改
窗口框架在setup_menu()里面,规划了主窗口控件,定义了菜单栏及其对应的插槽.内部界面是使用QSpitter做的布局,但是QSplitter有个缺陷,没有直接删除窗口的方法,但是作为替代,它管理的控件在被缩放到一定大小的时候会自动隐藏.窗口对象本身是QWidget对象,具有hidden属性,但是如果只是简单的对其设置为hidden实现的效果蛮丑陋的,完全不符合预期,还是会占用原来的空间,只是内容被隐藏了并且标题还在,本来窗口管理的控件都做好了发现实现的效果太差又注释掉了,好在是对这个项目的代码结构有初步的理解了