Cutter 菜单栏全解析:从 File 到 Help 的完整操作参考与源码实现对照
2026/9/20 1:56:04 网站建设 项目流程

Cutter 菜单栏全解析:从 File 到 Help 的完整操作参考与源码实现对照

【免费下载链接】cutterFree and Open Source Reverse Engineering Platform powered by rizin项目地址: https://gitcode.com/gh_mirrors/cu/cutter

本文系统梳理 Cutter(基于 rizin 的开源逆向工程平台)主菜单栏的全部菜单项,包括 File、Edit、View、Windows、Plugins、Debug 以及 Debug → View 与 Help 八个菜单的功能、操作路径与快捷键,并结合源码说明这些菜单项背后的实现机制(如 I/O 三模式控制器、布局管理与插件菜单扩展),帮助读者快速掌握 Cutter 的日常操作方式并理解其 GUI 层的组织原理。

菜单栏的位置取决于桌面环境:可能位于窗口顶部,也可能位于屏幕顶部(全局菜单栏)。以下章节与 菜单栏文档 及其子页面一一对应。

File 菜单:文件、映射与 I/O 模式管理

File 菜单涵盖新窗口、文件映射、PDB 导入、写入模式切换、项目保存、代码导出、Rizin 脚本执行与会话退出。

新窗口与文件映射

  • New WindowFile -> New Window,快捷键Ctrl+N):在不退出当前会话的前提下打开 Cutter 新实例,开始新的逆向会话。
  • Map FileFile -> Map File,快捷键Ctrl+M):将其他文件的内容映射进与已加载二进制共享的 I/O 空间,映射位置可以是随机的或指定的偏移。从文档描述看,这是复现运行环境的基础工具:可以加载并映射 core 文件、调试会话、框架所依赖的全部库和文件,从而在静态环境中重现目标二进制的完整依赖视图。
  • Import PDBFile -> Import PDB):加载外部 PDB 文件以补充调试信息。Cutter 不依赖 Windows API 解析 PDB,因此可在 Linux、macOS 等其他平台加载 Windows 二进制符号。

三种 I/O 模式:Write、Cache 与 Read-Only

File → Set mode 子菜单提供三种模式切换,这是 Cutter 修改二进制的核心安全机制:

模式操作路径行为风险
Write modeFile -> Set mode -> Write mode启用写模式,所有补丁与编辑直接写回磁盘上的原始文件每次修改都会落到磁盘,存在风险
Cache modeFile -> Set mode -> Cache mode修改只保存在内存缓存中,不触碰磁盘文件,需通过 Commit changes 显式提交更安全,无数据丢失风险
Read-Only modeFile -> Set mode -> Read-Only mode禁止一切补丁与编辑;仅在 Write/Cache 模式下可切换默认模式

Read-Only 是 Cutter 打开文件时的默认模式,除非用户显式启用 Write 或 Cache。Commit Changes from CacheFile -> Commit changes)用于把 Cache 模式下的全部修改一次性应用到磁盘文件——这是 Cache 模式相对 Write 模式的唯一"落盘"入口。

从源码结构看,这三种模式由 IOModesController 统一管理,其Mode枚举定义了READ_ONLYCACHEWRITE三个状态,并提供getIOMode()/setIOMode(Mode mode)接口。主窗口实现(约 230-240 行)中,菜单动作分别调用ioModesController.setIOMode(IOModesController::Mode::CACHE)WRITEREAD_ONLY,印证了菜单项与三态控制器的直接对应关系。

项目保存与代码导出

  • SaveFile -> SaveCtrl+S):将会话保存为项目文件;若当前会话尚未关联项目文件,会弹出 "Save as..." 对话框。
  • Save As...File -> Save As...):保存会话当前状态,包括函数名、注释等分析成果。注意该功能文档标注为 Beta 阶段。
  • Export as CodeFile -> Export as code):将完整二进制导出为可在编程语言中使用的格式,支持 Python 数组、Java、多种 C 数组格式、JavaScript 等。文档特别强调:这不是反编译功能,只是数据到代码字面量的转换。

运行 Rizin 脚本与退出

Run Rizin scriptFile -> Run Rizin script)用于执行 Rizin 脚本——即包含一系列 Rizin 命令的文件,可手工编写,也可由 Rizin 命令自动生成(以星号结尾的命令,如afl*,会输出可重放的命令脚本)。文档给出的示例脚本:

?e hello world ?v 10+5 pdf @ main

QuitFile -> QuitCtrl+Q):退出当前会话,退出前会询问是否保存会话以免丢失数据。

Edit 菜单:导航历史与偏好设置

Edit 菜单相对精简,核心是寻址历史导航与设置入口。

  • SearchEdit -> Search):显示 Search 组件。
  • Undo SeekEdit -> Undo SeekAlt+Left):回退到上一个浏览位置。
  • Redo SeekEdit -> Redo SeekAlt+Right):前进到寻址历史中的下一位置。这两个动作共同构成"浏览历史"栈,语义类似浏览器的后退/前进,但作用于逆向工作区中的地址跳转。
  • PreferencesEdit -> Preferences):打开偏好设置对话框,用于访问和定义 Cutter 的各项配置。

View 菜单:刷新、缩放与布局管理

View 菜单负责内容刷新、外观选项与布局持久化。

刷新与重置

  • Refresh ContentsView -> Refresh Contents):在部分场景下(例如从内置 Rizin 控制台定义了新函数后),组件显示的信息可能不是最新的;刷新会从会话中重新拉取最新数据并更新各视图。文档注明自动感知底层变更并自动刷新目前是进行中的工作。
  • Reset to default layoutView -> Reset to default layout):将当前布局重置为 Cutter 默认布局。
  • Reset SettingsView -> Reset Settings):将当前设置重置为 Cutter 默认设置。

面板锁定与标签栏

  • Unlock PanelsView -> Unlock Panels):勾选与否决定各组件是否允许被移动或关闭;取消勾选可防止误操作改变当前布局。
  • Show Tabs at the TopView -> Show Tabs at the Top):切换标签栏位置。
  • Grouped dock draggingView -> Grouped dock dragging):启用后拖动某个组件会连同与其分组的组件一起拖动;若要单独拖动分组中的某个组件,需从标签页本身而非标题栏拖拽。禁用该选项则始终按单个组件拖动。

缩放

  • Zoom InView -> Zoom -> Zoom InCtrl++):放大 Graph、Disassembly、Hexdump 等组件内容。
  • Zoom OutView -> Zoom -> Zoom OutCtrl+-):缩小。
  • ResetView -> Zoom -> ResetCtrl+=):恢复默认缩放。

布局的保存与管理

  • Save LayoutView -> Save Layout):以指定名称保存当前布局。一个布局包含当前打开的组件集合、它们的位置以及部分属性。
  • Manage layoutsView -> Manage layouts):对已保存的布局执行重命名或删除。
  • Layouts 子菜单View -> Layouts -> 布局名):把所选布局加载到当前视图;加载布局本身不会随操作被修改,若要保存变更需另行使用 Save Layout。

这些布局文档对应 布局偏好文档。

Windows 菜单:分析视图与组件实例管理

Windows 菜单是组件开关的主入口,分为"显示已有组件"与"新增组件实例"两类。

信息显示组件

  • DashboardWindows -> Dashboard):显示二进制基本信息面板,包括文件名、二进制格式(PE、ELF64 等)、位数(16/32/64)、架构(x86、ARM 等)、访问模式(Read/Write/Execute)、大小、二进制类型、编写语言、编译器检测、Stack Canaries、NX 位、位置无关代码、校验和(MD5、SHA1 等)、熵值等。
  • FunctionsWindows -> Functions):列出 Cutter 识别的函数及名称、地址、大小等信息;Main、Entrypoint 和外部函数会以特定颜色高亮以便快速定位。
  • DecompilerWindows -> Decompiler):显示当前函数的反编译结果。文档指出 Cutter 发布版默认附带两个反编译器:rz-ghidra 与 rz-dec(后者"即将提供");该组件支持地址同步、重命名、重新定类型等交互操作,且可通过插件扩展更多反编译器。
  • Graph OverviewWindows -> Graph Overview):Graph 视图的缩略总览形式,以拉远的视角帮助理解函数整体控制流。
  • SearchWindows -> Search):打开 Search 面板,可在二进制中搜索数据、字符串、十六进制内容等。
  • StringsWindows -> StringsShift+F12):显示程序中的可打印字符串,组件内组合框可选择显示整个二进制或特定段/节中的字符串。
  • TypesWindows -> Types):打开 Types 组件,用于定义、加载、导出和管理结构体、枚举等数据类型。
  • CommentsWindows -> Comments):显示当前会话的自动注释与用户自定义注释。
  • ConsoleWindows -> Console:或 `Ctrl+``):打开内置 Rizin 控制台,可直接执行 Rizin 命令。

新增组件实例

以下菜单项用于创建组件的新实例,以便同时查看多个位置:

  • Add DecompilerWindows -> Add Decompiler):新增反编译组件实例,配合多个反编译器同时查看多个反编译函数。
  • Add DisassemblyWindows -> Add Disassembly):新增反汇编实例。
  • Add GraphWindows -> Add Graph):新增 Graph 实例。文档说明了 Graph 视图的结构:每个节点代表函数内一个基本块,块间进出边代表控制流。
  • Add HexdumpWindows -> Add HexdumpShift+G):新增十六进制转储实例。

Plugins 菜单:插件扩展点

Plugins 子菜单包含由已加载插件创建的各种窗口与视图。默认情况下该菜单为空,直到有插件向其注册动作与菜单项。

从源码结构看,主窗口界面定义在 MainWindow.ui(约 158 行)中即预置了menuPlugins这一顶级菜单容器;MainWindow.cpp 中还存在addMenuFileAction(QAction *action)(约 571 行)这类向菜单动态追加动作的接口,以及getMenuByType(MenuType type)(约 541 行)供插件按类型定位目标菜单。可以推断,插件通过 PluginManager 加载后,借助这些接口把自身动作挂接到 Plugins 菜单及相关菜单上,从而形成"默认空菜单、随插件填充"的行为。

Debug 菜单:调试与模拟执行控制

Debug 菜单提供调试会话的启动与执行控制。

会话启动

  • Start debugDebug -> Start debugF9):对当前加载的二进制启动调试会话。
  • Start emulationDebug -> Start emulation):对当前二进制启动模拟会话。Cutter 支持多种文件格式的模拟。与调试不同,模拟并非真正执行二进制,而是逐条模拟指令——这对分析自包含函数、密码学算法或数据去混淆非常有用;且模拟不受运行平台限制,例如可在 Windows 上模拟 ELF 文件、在 Linux 上模拟 DLL。
  • Attach to processDebug -> Attach to process):将 Cutter 调试器附加到已运行的进程,而非生成新进程。
  • Connect to a remote debuggerDebug -> Connect to a remote debugger):通过提供远程调试器的 IP 与端口,连接 GDB、WinDbg 等远程调试器。

单步与继续

动作操作路径快捷键行为
Step IntoDebug -> StepF7执行单条汇编指令,步入函数与循环
Step OverDebug -> Step overF8执行单条指令,跨过程序;被调用函数会被执行,暂停点为函数调用后的下一条指令
Step OutDebug -> Step outCtrl+F8执行代码,直到当前函数返回时暂停
ContinueDebug -> ContinueF5继续执行,直到命中断点、被用户手动挂起或程序退出
Continue until callDebug -> Continue until call继续执行直到遇到函数调用
Continue until syscallDebug -> Continue until syscall继续执行直到遇到系统调用

Debug → View 菜单:调试辅助视图

Debug 下的 View 子菜单集中了调试态的辅助组件开关。除 Backtrace 外的多数视图文档标注仅在 Debug 模式下可用

  • BacktraceDebug -> View -> Backtrace):显示回溯窗口。
  • BreakpointsDebug -> View -> Breakpoints):显示断点组件,可列出、管理、增删和定义断点。
  • ThreadsDebug -> View -> Threads):列出运行中应用的线程。
  • ProcessesDebug -> View -> Processes):显示所有子进程并允许在进程间切换,对内核调试或跟踪 fork 行为尤其有用。
  • Memory mapDebug -> View -> Memory map):显示运行进程的已映射内存页,包括已加载库的映射与动态分配的映射。
  • RegistersDebug -> View -> Registers):显示运行进程的寄存器与标志信息;不仅可查看,还可直接修改。
  • Register ReferencesDebug -> View -> Register References):Registers 组件的扩展视图,支持对寄存器值进行多层深度的解引用(telescope)。
  • StackDebug -> View -> Stack):显示运行进程栈值与栈结构。

Help 菜单:版本、反馈与文档

  • AboutHelp -> About):查看当前版本、已安装插件、作者、构建选项、许可证等信息。
  • Report an issueHelp -> Report an issue):在浏览器中打开 Cutter 的 GitHub 新 issue 页面,并自动填充 issue 模板中的相关信息。
  • DocumentationHelp -> Documentation):在浏览器中打开 Cutter 用户文档。

源码级补充:菜单是如何组织的

从 MainWindow.ui 可以看到,菜单栏由一个QMenuBar(约 36 行)承载,内部按顶级菜单组织为menuFile(51 行)、menuSetMode(63 行,即 Set mode 子菜单)、menuView(95 行)、menuZoom(102 行)、menuLayouts(111 行)、menuTools(131 行)、menuHelp(137 行)、menuEdit(145 行)、menuWindows(154 行)、menuPlugins(158 行)、menuAddInfoWidgets(163 行)、menuAddDebugWidgets(168 行)、menuDebug(183 行)等,与上文各菜单一一对应。其中menuAddInfoWidgetsmenuAddDebugWidgets对应 Windows 菜单中的"新增组件实例"子菜单。

MainWindow.cpp 中除菜单动作到IOModesController的映射外,还维护了面向插件的扩展菜单机制(约 146-147 行创建了名为 "Plugins" 的反汇编/可寻址上下文扩展菜单,2041 行的getContextMenuExtensions(ContextMenuType type)提供统一访问),说明菜单体系同时服务于主菜单栏与上下文菜单两类扩展点。

快捷键方面,各菜单项标注的快捷键(Ctrl+NF7/F8、`Ctrl+`` 等)由 DefaultShortcuts.cpp 中的默认快捷键表统一注册,可在偏好设置的快捷键选项中调整。

快速参考表

菜单典型操作快捷键
FileNew WindowCtrl+N
FileMap FileCtrl+M
FileSaveCtrl+S
FileQuitCtrl+Q
EditUndo Seek / Redo SeekAlt+Left/Alt+Right
ViewZoom In / Out / ResetCtrl++/Ctrl+-/Ctrl+=
WindowsStringsShift+F12
WindowsAdd HexdumpShift+G
WindowsConsole:或 `Ctrl+``
DebugStart debugF9
DebugStep / Step over / Step outF7/F8/Ctrl+F8
DebugContinueF5

【免费下载链接】cutterFree and Open Source Reverse Engineering Platform powered by rizin项目地址: https://gitcode.com/gh_mirrors/cu/cutter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询