本文档描述了Ghidra调试器接口的架构和功能,特别关注允许用户与运行中的程序或程序跟踪进行交互的用户界面组件。有关调试控制功能的信息,请参阅调试器控制插件。
调试器接口提供了Ghidra中调试会话的视觉组件和控件。它由几个关键组件组成,允许用户:
这些组件共同创建了一个与Ghidra静态分析功能集成的综合调试环境。
来源
调试器接口构建在Ghidra的插件-提供者架构之上,通过调试特定功能扩展了现有的代码浏览器和字节查看器组件。
来源
调试器接口组件使用“特性(trait)”模式以模块化方式实现核心功能。每个提供者都包含多个特性实现:
来源
动态列表是主要的S代码视图组件,显示来自跟踪或实时目标的反汇编代码。它通过调试专用功能扩展了Ghidra的静态代码列表。
主要功能
列表可以配置不同的跟踪规范
| 跟踪模式 | 描述 |
|---|---|
| 跟踪程序计数器 | 跟随栈或寄存器中的PC(默认) |
| 跟踪程序计数器(按栈) | 仅使用栈帧中的PC值 |
| 跟踪程序计数器(按寄存器) | 仅使用寄存器中的PC值 |
| 跟踪栈指针 | 跟随栈指针地址 |
| 不跟踪 | 禁用自动导航 |
来源
内存字节查看器以各种格式(十六进制、十进制等)显示原始内存内容。它通过调试专用功能扩展了Ghidra的字节查看器。
主要功能
内存读取策略
| 策略 | 描述 |
|---|---|
| 读取可见内存,只读一次 | 读取可见内存,但只读内存仅读取一次 |
| 读取可见内存 | 持续读取所有可见内存 |
| 不读取内存 | 禁用自动内存读取 |
来源
调试控制台提供了一个文本接口,用于在调试会话期间进行命令输入和日志输出。
来源
调试器接口使用坐标系统,通过DebuggerCoordinates类来维护组件之间的上下文。
此坐标系统允许组件:
组件通过coordinatesActivated()方法响应坐标更改,该方法更新其显示以反映新上下文。
来源
动态列表可以自动反汇编程序计数器或跟踪位置的代码。
此功能对于调试特别有用,因为:
自动反汇编功能可以通过列表中的“自动反汇编”开关启用或禁用。
来源
调试器接口支持多个视图,可以配置这些视图以显示调试会话的不同方面。
这允许用户同时观察程序的多个方面,例如:
克隆视图通过“克隆窗口”操作或编程方式创建。
来源
调试器接口中的内存用颜色编码以指示其状态:
对于以前已读取的只读内存,过期着色较淡,因为其内容不太可能发生变化。
这种可视化有助于用户理解:
来源
调试器接口使用Ghidra的事件系统进行组件间通信:
TraceActivatedPluginEvent - 当新的跟踪激活时TraceLocationPluginEvent - 当位置改变时TraceSelectionPluginEvent - 当选择改变时TrackingChangedPluginEvent - 当跟踪设置改变时这些事件允许不同组件在用户与调试器交互时保持同步。
该接口还通过静态映射服务与静态分析视图同步,该服务映射动态跟踪和静态程序之间的地址。
来源
列表和内存字节提供者都支持自定义的复制和粘贴实现:
编辑功能取决于当前的控制模式,该模式决定了编辑是定向到实时目标、跟踪数据库还是模拟器。
来源
调试器接口包含一个位置标签,显示当前地址的信息:
此标签有助于用户了解他们当前正在查看程序的哪个部分,并为当前位置提供上下文。
该接口还支持通过以下方式导航:
来源
调试器接口与Ghidra的几个其他组件集成:
这些集成创建了一个综合调试环境,充分利用了Ghidra强大的分析功能。
来源