Cutter 快捷键完全指南:从默认按键到反汇编、图形与调试工作流
2026/9/21 2:18:52 网站建设 项目流程

Cutter 快捷键完全指南:从默认按键到反汇编、图形与调试工作流

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

本篇指南以 Cutter 官方用户文档 shortcuts.rst 为核心骨架,结合仓库中 DefaultShortcuts.cpp 的完整快捷键注册表与 ShortcutManager 的实现细节,系统梳理 Cutter 的全部默认快捷键。读完本文,你将掌握全局导航、各 Widget 呼出、反汇编/图形视图编辑、以及调试会话控制的全套键盘操作,并能理解这些快捷键在源码中的注册机制与自定义方式。

快捷键的底层机制:ShortcutManager 与 DefaultShortcuts

Cutter 的快捷键并非散落在各个 UI 文件中的魔法键位,而是由一套集中的注册表统一管理。所有默认快捷键都定义在 DefaultShortcuts.cpp 中,以QHash<QString, Shortcut>的形式存在,每个条目包含:

  • ID 标识:如Disassembly.defineFunctionDebug.toggleBreakpoint,采用“类别.动作”的命名规范;
  • 键位序列QList<QKeySequence>,一个动作可绑定多个键位;
  • 描述文本与上下文:用于 UI 展示与翻译(通过QT_TRANSLATE_NOOP标记,见 DefaultShortcuts.h 中的Shortcut结构体)。

运行时,各 Widget 通过单例 ShortcutManager(Shortcuts()宏)统一取键位并创建动作。例如Shortcuts()->makeAction("Debug.start", this)会一次性完成QAction的快捷键设置与文本翻译(见 DebugActions.cpp),makeQShortcut则用于直接挂在某个 Widget 上的QShortcut(如 DisassemblerGraphView.cpp 中的Graph.takeTrue等)。

值得注意的实现细节是:ShortcutManager::getKeySequences会优先检查用户自定义键位(getCustomKeySequences),为空时才回落到默认注册表。从 ShortcutManager.cpp 的注释可见,自定义快捷键的持久化支持当前尚未实现,因此本文以下表格均以默认键位为准。

全局快捷键:贯穿整个界面的通用操作

以下全局快捷键在任何工作区下都生效,对应 DefaultShortcuts.cpp 中General.Console.Omnibar.等前缀的条目:

快捷键功能源码 ID
.(句点)聚焦控制台输入框Console.focusConsole
G/S聚焦搜索栏General.seek/General.showFilter
Ctrl/Cmd+R刷新当前内容General.refreshContents

General.refreshContents在主窗口中被显式绑定到“刷新”动作(见 MainWindow.cpp)。搜索栏相关快捷键由Search.前缀补充,例如Ctrl/Cmd+F呼出/隐藏搜索栏(Search.toggle)、Enter查找下一个、Shift+Enter查找上一个、Ctrl/Cmd+Enter跳到最后一项、Ctrl/Cmd+O打开搜索选项菜单(见 DefaultShortcuts.cpp)。

此外,General.类别还提供了不少文档表格未列出的实用键位:

快捷键功能源码 ID
$跳转到当前函数末尾General.seekToFunctionEnd
^跳转到当前函数开头General.seekToFunctionStart
Ctrl/Cmd+Z / Shift+Ctrl/Cmd+Z撤销/重做 Seek(Back/Forward)General.back/General.forward
Esc清除过滤器General.clearFilter

Widget 快捷键:快速呼出各信息窗口

Cutter 的字符串、导入导出、图形、控制台等面板均支持一键呼出(Toggle),对应源码中的Strings.toggleGraph.toggleImports.toggleExports.toggleConsole.toggle

快捷键功能
Shift+F12呼出/隐藏 Strings(字符串)窗口
Shift+G呼出/隐藏 Graph(图形)窗口
Shift+I呼出/隐藏 Imports(导入)窗口
Shift+E呼出/隐藏 Exports(导出)窗口
Ctrl+\`` 或:`呼出/隐藏 Console(控制台)窗口

这些 Toggle 动作由各 Widget 自行注册:例如 StringsWidget.cpp 与 ImportsWidget.cpp 中的makeQShortcut("Strings.toggle" / "Imports.toggle", main)、GraphWidget.cpp 中的Graph.toggle、ExportsWidget.cpp 中的Exports.toggle。控制台除切换外还有独立的辅助键:Ctrl/Cmd+L清空输出、/翻历史、Tab自动补全、Esc清空输入(Console.前缀,见 ConsoleWidget.cpp)。

反汇编视图快捷键:静态分析的核心操作

原文档强调:反汇编视图的大部分快捷键同样适用于反汇编图形视图(Disassembly Graph view)。完整键位表如下:

快捷键功能
EscSeek 到上一个位置
Space切换到反汇编图形视图
Ctrl/Cmd+C复制
;添加注释
P在当前地址定义新函数
Shift+P编辑函数
U取消定义函数
N重命名当前函数/标志
Shift+N重命名此处引用的标志/函数
Y编辑/重命名局部变量
A将当前地址设为字符串
C将当前地址设为代码
X显示交叉引用(Xrefs)
Ctrl/Cmd++放大
Ctrl/Cmd+-缩小
Ctrl/Cmd+=重置缩放

上述动作在 DisassemblyContextMenu.cpp 中通过initShortcutAction(&action..., "Disassembly.xxx", ...)批量接入右键菜单,是反汇编行右键菜单(详见 disassembly-context-menu.rst)与键盘操作共用的一套动作体系。以 DefaultShortcuts.cpp 的Disassembly.类别为准,还可补充以下高频键位:

快捷键功能源码 ID
Ctrl/Cmd+Alt+C复制指令字节Disassembly.copyInstructionBytes
Shift+X查看局部变量的 XrefsDisassembly.XRefsForVariables
G修改/添加全局变量Disassembly.globalVariable
Shift+A以高级(Advanced)方式设为字符串Disassembly.setAsStringAdvanced
*以高级方式设为数据Disassembly.setToDataEx
D切换为数据(Switch Data)Disassembly.setToData
H/J/K/L光标左/下/上/右移动Disassembly.moveLeft/Down/Up/Right
Ctrl/Cmd+Alt+C复制指令字节Disassembly.copyInstructionBytes

代码定位同样重要:Esc用于返回上一个 seek 位置(General.seekPrev,见 DecompilerWidget.cpp),而撤销/重做 seek 对应Ctrl/Cmd+ZCtrl/Cmd+Shift+Z

图形视图快捷键:以键盘驱动图漫游

图形视图(Disassembly Graph View)除了共享上文多数快捷键外,还有一套针对控制流图的专属导航键位(源码前缀Graph.,见 DefaultShortcuts.cpp):

快捷键功能
EscSeek 到上一个位置
Space切换回反汇编视图
Ctrl/Cmd+鼠标滚轮缩放
+放大
-缩小
=重置缩放
J下一条指令
K上一条指令
T沿真分支/无条件分支前进
F沿假分支/无条件分支前进

J/K/T/F四个键是图漫游的灵魂:JK沿当前基本块内逐条移动指令,TF则直接跳入对应的分支目标块。它们的实现位于 DisassemblerGraphView.cpp,通过Graph.takeTrueGraph.takeFalseGraph.nextInstrGraph.prevInstr四个 QShortcut 挂载。图形视图的功能细节可进一步参考 graph-widget-context-menu.rst。

调试快捷键:断点与单步控制

调试会话相关的快捷键由DebugActions统一注册(源码前缀Debug.,见 DefaultShortcuts.cpp),主键位如下:

快捷键功能
F9开始调试
F7单步步入(Step into)
F8单步步过(Step over)
F5继续执行(Continue)
F2Ctrl/Cmd+B添加/移除断点
Ctrl/Cmd+F2编辑或打开高级断点对话框

断点相关操作进一步对应 BreakpointsDialog 与 BreakpointWidget 中的动作,且与文档 breakpoints-widget-context-menu.rst 描述的右键菜单联动。调试工具栏的更多功能(如 Continue until Main/Call/Syscall)可参考 debug-buttons-toolbar.rst。此外Debug.类别还包含一些扩展键位:

快捷键功能源码 ID
Ctrl/Cmd+F5反向继续(Continue backwards)Debug.continueBack
Ctrl/Cmd+F7反向单步(Step backwards)Debug.stepBack
Ctrl/Cmd+F8单步跳出(Step out)Debug.stepOut

扩展键位速查:其他类别的默认快捷键

除了上述文档重点覆盖的四大类别,Cutter 的注册表还内置了大量未收录进shortcuts.rst的默认键位。借助偏好设置中的快捷键面板(见下文)可以随时查阅,这里列出部分高频条目:

  • Hex 视图Ctrl/Cmd+C复制(Hex.copy)、N在地址处添加标志(Hex.addFlag)、M添加标记(Hex.addMark);
  • Types 类型管理Shift+D删除、Shift+E编辑、Shift+X导出、Shift+L加载、Shift+R重命名、Shift+U显示用法、Enter/Shift+V查看(Types.前缀,见 DefaultShortcuts.cpp);
  • Omnibar 地址栏Esc清空、Ctrl/Cmd+Enter显示更多补全、Ctrl/Cmd+Shift+Enter显示全部补全(Omnibar.前缀);
  • 图形总览(Overview)+放大、-缩小;
  • Docking 停靠Alt启用/禁用停靠(Docking.toggle)。

在界面中查看与管理快捷键

所有快捷键都会在**偏好设置 → Shortcuts(快捷键)**页面中集中展示。其实现是 ShortcutOptionsWidget:

  • 以树形结构按类别(General、Disassembly、Decompiler、Strings、Graph、Breakpoint、Console、Hex、Debug、Functions、Omnibar、Exports、Imports、Graph Overview、Docking)分组展示,每一行包含Command(命令)、Shortcut(快捷键)、Description(描述)三列;
  • 顶部提供过滤器输入框,按命令名、快捷键或描述实时过滤,便于快速定位某个键位(filterShortcutTree实现);
  • 树默认按命令名升序排列并全部展开。

从 ShortcutOptionsWidget.cpp 的实现可以看到,面板数据来自Shortcuts()->getAllShortcuts(),即遍历默认注册表并读取每个 ID 的键位序列;若有多个键位则用逗号分隔显示。偏好设置整体入口参见 preferences.rst。

小结

Cutter 的快捷键体系以 DefaultShortcuts.cpp 的集中注册表为数据源,经 ShortcutManager 单例分发给各 Widget 与菜单动作,最终在偏好设置面板中可视化呈现。掌握G/S全局搜索、Space视图切换、P/U/N函数与标志操作、T/F/J/K图漫游、以及F5/F7/F8/F9/F2调试控制这组核心键位,即可在不触碰鼠标的情况下完成从定位、分析到调试的完整逆向工作流。随着版本演进,部分键位可能在偏好设置面板中调整,建议以面板中实时展示的内容为准。

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

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

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

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

立即咨询