
Cutter 命令行选项完整指南从基础用法到源码级解析【免费下载链接】cutterFree and Open Source Reverse Engineering Platform powered by rizin项目地址: https://gitcode.com/gh_mirrors/cu/cutterCutter 是一款基于 rizin 的自由开源逆向工程平台其命令行界面CLI是自动化分析、脚本集成与无头操作的关键入口。本文基于仓库中的官方文档 docs/source/user-docs/command-line.rst逐一讲解 Cutter 全部命令行选项的语法、语义与使用场景并结合 src/CutterApplication.cpp 中的parseCommandLineOptions()实现剖析每个参数在源码层的校验逻辑与落地路径帮助你在终端中准确、高效地驱动 Cutter。命令行语法SynopsisCutter [options] [filename | --project project]位置参数filename指定要打开的文件如果未指定任何文件名Cutter 会弹出文件选择对话框New File 对话框从源码看这一分支由 src/CutterApplication.cpp 控制当命令行位置参数为空且未提供--project时主窗口依次显示欢迎对话框与新建文件对话框。也可使用--project project直接加载.rzdb项目文件此时无需指定二进制文件名。# 最简用法打开文件并弹出分析选项对话框 cutter ./sample.bin # 直接加载项目 cutter --project myproject.rzdb选项总览以下表格汇总了文档定义的全部命令行选项随后逐一展开说明选项参数作用filename文件路径要打开的文件位置参数-h, --help—显示命令行帮助--help-all—显示帮助含 Qt 特定选项-v, --version—显示版本信息-A, --analysis0\|1\|2打开文件时自动执行指定级别的分析-a, --arch架构名指定架构如x86、arm-b, --bits位数指定架构位数如32、64-c, --cpuCPU 名指定具体 CPU 型号-o, --os操作系统指定操作系统-e, --endianbig\|little指定字节序-F, --formatbin 插件名强制使用指定文件格式插件-B, --base基址在指定基地址加载二进制-m, --map映射地址在指定地址映射二进制-i脚本文件运行脚本文件-p, --project项目文件加载项目文件-w, --writemode—以写模式打开文件默认只读-P, --phymode—禁用虚拟寻址--pythonhome路径内嵌 Python 解释器的 PYTHONHOME--no-output-redirect—禁用输出重定向--no-plugins—禁用全部插件隐含下面两个选项--no-cutter-plugins—禁用 Cutter 插件--no-rizin-plugins—禁用 rizin 插件基础选项帮助与版本-h, --help显示命令行选项帮助。--help-all除 Cutter 自身选项外还显示 Qt 框架注入的选项如-style、-platform等适合排查与 Qt 运行时相关的问题。-v, --version打印版本信息。版本号在 src/CutterApplication.cpp 中通过setApplicationVersion(CUTTER_VERSION_FULL)设置CUTTER_VERSION_FULL由构建系统生成并写入CutterConfig.h。文件打开相关选项filename位置参数未指定时显示文件选择对话框指定后跳过对话框直接进入打开流程。源码中位置参数通过QCommandLineParser::positionalArguments()收集src/CutterApplication.cpp取第一个作为文件名第 L509-L510 行。-p, --project file加载 rizin 项目文件。项目文件通过rz_project_load_file()加载见 src/core/MainWindow.cpp失败时会弹出错误对话框并回退到新建文件对话框。项目文件路径在源码中是独立于位置参数解析的src/CutterApplication.cpp因此可以不带文件名单独使用cutter -p backup.rzdb-w, --writemode以写模式打开文件默认是只读模式。源码中writeEnabled cmdParser.isSet(writeModeOption)src/CutterApplication.cpp该标志写入InitialOptions::writeEnabledsrc/common/InitialOptions.h。官方文档特别强调当与-A/--analysis level组合使用时会直接以写模式打开文件不再弹出任何后续对话框或确认提示适合完全无人值守的批处理场景cutter -w -A 1 ./patchme.bin-P, --phymode禁用虚拟寻址即不使用 VA。源码中useVA !cmdParser.isSet(phyModeOption)src/CutterApplication.cpp对应 src/common/InitialOptions.h 中默认值为true的useVA字段。适用于以物理地址而非虚拟地址访问内存的场景如固件分析。加载参数架构、位数、CPU 与操作系统这四个选项共同决定 rizin 如何解释二进制文件-a, --arch arch指定架构名例如x86、arm、mips、riscv。见 src/CutterApplication.cpp。-b, --bits bits指定架构位数。源码要求解析结果必须为正整数ok bits 0见 src/CutterApplication.cpp非法的位数会被静默忽略。-c, --cpu cpu指定具体 CPU 型号如x86.16、cortex-m3。见 src/CutterApplication.cpp。-o, --os os指定操作系统如linux、windows、darwin。见 src/CutterApplication.cpp。# 以 ARM 32 位小端方式打开固件 cutter -a arm -b 32 -e little ./firmware.bin # 以 x86 16 位实模式分析引导扇区 cutter -a x86 -c x86.16 -b 16 -o linux ./bootsector.bin这些值被写入InitialOptions的arch、bits、cpu、os字段src/common/InitialOptions.h最终在加载时作用于 rizin 核心。-e, --endian big|little指定字节序。这是严格校验的参数之一源码中将其值小写化后与little、big精确比对其他任何值都会向 stderr 输出Invalid Endianness. You can only set it to big or little.并使程序以非零状态退出src/CutterApplication.cpp# 以 big-endian 方式加载 MIPS 镜像 cutter -a mips -b 32 -e big ./router_fw.bin格式与地址控制选项-F, --format name强制使用指定的 bin 插件文件格式识别插件来解析文件对应InitialOptions::forceBinPluginsrc/common/InitialOptions.h可绕过自动格式检测。例如强制按 ELF、PE 或 raw 解析cutter -F elf ./mystery.bin cutter -F pe ./program.exe cutter -F raw -a x86 -b 64 ./shellcode.bin-B, --base base address在指定基地址加载二进制。源码使用toULongLong(ok, 0)解析支持十进制、十六进制0x前缀与八进制0前缀解析成功才写入binLoadAddrsrc/CutterApplication.cppcutter -B 0x400000 ./kernel.bin-m, --map map address将二进制映射到指定地址解析方式与-B相同写入mapAddrsrc/CutterApplication.cpp。-B与-m的默认值均为RVA_INVALIDsrc/common/InitialOptions.h表示“未指定”。自动化与脚本选项-A, --analysis level打开文件后自动执行指定级别的分析必须同时指定filename否则程序会报错退出src/CutterApplication.cpp。合法取值如下级别含义底层命令0不执行分析空命令1标准自动分析aaa2深度分析实验性aaaa源码中级别被限制在0到2之间越界值会报Invalid Analysis Level并退出src/CutterApplication.cpp。分析命令通过analysisCmd列表传递给 rizinsrc/CutterApplication.cpp并映射为 src/common/InitialOptions.h 中analysisCmd的默认值aaa。# 打开并执行标准分析 cutter -A 1 ./target.bin # 不分析直接查看原始字节 cutter -A 0 ./target.bin # 结合写模式实现无人值守修改 cutter -w -A 1 ./target.bin-i file打开文件后运行指定的 rizin 脚本文件写入InitialOptions::script见 src/CutterApplication.cpp。脚本可以是任意合法的 rizin 命令序列cutter -A 1 -i analyze_and_dump.rz ./target.bin值得注意的关联行为在 src/core/MainWindow.cpp 的openNewFile()中若未显式指定-iCutter 还会自动探测与文件名同名的filename.rz脚本并弹窗询问是否加载例如打开a.bin时会检查a.bin.rz。运行环境与排障选项--pythonhome PYTHONHOME指定内嵌 Python 解释器使用的PYTHONHOME路径。在启用 Python 绑定的构建中该值会被传递给PythonManager并最终调用Py_SetPythonHome()见 src/common/PythonManager.cpp用于定位 Python 标准库与站点包cutter --pythonhome /usr/lib/python3.11 ./target.binAppImage 与 macOS 打包版本会自动推导内置的 PYTHONHOME见 src/common/PythonManager.cpp普通用户通常无需手动指定。此选项仅在CUTTER_ENABLE_PYTHON编译开关开启时生效src/CutterApplication.cpp。--no-output-redirect禁用输出重定向。默认情况下 Console 组件会重定向程序的部分输出当调试崩溃或卡死、怀疑重定向导致日志丢失时可用此选项让输出直接落到终端。源码中该选项决定outputRedirectionEnabled标志src/CutterApplication.cpp随后在 src/CutterApplication.cpp 通过Config()-setOutputRedirectionEnabled()生效# 崩溃排障时保留完整终端输出 cutter --no-output-redirect ./crashing.bin插件控制选项三个选项控制插件加载范围其中--no-plugins是总开关隐含同时禁用 Cutter 插件与 rizin 插件--no-pluginsenableCutterPlugins false且enableRizinPlugins falsesrc/CutterApplication.cpp。--no-cutter-plugins仅禁用 Cutter 插件反编译器等 GUI 侧扩展。--no-rizin-plugins仅禁用 rizin 插件核心命令与分析能力扩展。源码中插件标志保存在CutterCommandLineOptionssrc/CutterApplication.hCutter 插件加载在 src/plugins/PluginManager.cpp 的loadPlugins(enablePlugins)中执行——当enablePlugins为false时直接返回不扫描任何插件目录--no-rizin-plugins则在Core()-initialize(enableRizinPlugins)时作用于 rizin 核心src/CutterApplication.cpp。这在插件引起崩溃或需要纯净环境复现问题时非常有用# 完全隔离插件环境排查插件冲突 cutter --no-plugins ./target.bin # 仅保留 Cutter 插件如反编译器禁用 rizin 插件 cutter --no-rizin-plugins ./target.bin另外从launchNewInstance()src/CutterApplication.cpp可以看到当以非插件模式启动时新开实例的命令行会透传对应的--no-cutter-plugins/--no-rizin-plugins标志保证多实例行为一致。综合实战示例场景一固件逆向的完整无人值守流程# ARM 32 位 big-endian 固件深度分析后执行自定义脚本 cutter -a arm -b 32 -e big -A 2 -i dump_flash.rz -w ./router_fw.bin场景二恶意软件静态初检隔离环境 只读# 禁用全部插件、不分析、禁用输出重定向避免插件崩溃影响取证 cutter --no-plugins --no-output-redirect -A 0 ./sample.exe场景三从项目快照恢复工作区cutter -p session_backup.rzdb参数解析实现要点源码导读所有命令行选项的解析集中在 src/CutterApplication.cpp 的parseCommandLineOptions()中基于 Qt 的QCommandLineParser实现。源码中有一条醒目的注释Keep this function in sync with documentation保持此函数与文档同步即本文所依据的 command-line.rst 与代码实现是一一对应的权威契约。解析要点归纳如下校验即时报错-A级别0-2、-e字节序big/little均有严格白名单校验非法输入会向 stderr 输出错误信息并返回false程序随即以退出码 1 终止src/CutterApplication.cpp。位置参数与项目参数分流filename来自positionalArguments()--project独立解析两者都为空时才显示新建文件对话框。数值解析宽容-B/-m使用基数 0 的toULongLong天然支持0x十六进制与八进制-b使用十进制toInt且要求大于 0。选项映射到InitialOptions解析结果统一落入 src/common/InitialOptions.h 定义的InitialOptions结构体该结构体同时服务于 GUI 的打开文件对话框——这正是命令行参数与图形界面参数能无缝互转的原因getArgs()src/CutterApplication.cpp能把当前InitialOptions反向还原成命令行参数序列。无头启动路径带文件名启动时若-A已指定或提供了--project则跳过分析选项对话框直接执行src/CutterApplication.cpp这也是-w -A组合能够全自动运行的根本机制。延伸阅读菜单与工具栏操作docs/source/user-docs/menus.rst各功能模块说明docs/source/user-docs/features.rst偏好设置docs/source/user-docs/preferences.rst快捷键参考docs/source/user-docs/shortcuts.rst常见问题排查docs/source/user-docs/common-issues.rst命令行解析完整实现src/CutterApplication.cpp选项数据结构src/common/InitialOptions.h文件打开流程src/core/MainWindow.cpp【免费下载链接】cutterFree and Open Source Reverse Engineering Platform powered by rizin项目地址: https://gitcode.com/gh_mirrors/cu/cutter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考