Cutter 的 Stack 控件右键菜单与堆栈值编辑:从 UI 操作到底层字节写入

发布时间:2026/11/11 9:46:37

Cutter 的 Stack 控件右键菜单与堆栈值编辑:从 UI 操作到底层字节写入 应用安全桌面应用开发工具【免费下载链接】cutterFree and Open Source Reverse Engineering Platform powered by rizin项目地址https://gitcode.com/gh_mirrors/cu/cutter点击查看免费下载本篇文章围绕 Cutter基于 rizin 的自由开源逆向工程平台中 Stack堆栈控件的右键菜单展开聚焦其中核心的 “Edit stack value...” 功能说明如何通过对话框修改当前堆栈项的值并结合 StackWidget.cpp 与 Cutter.cpp 等源码讲解从界面交互、模型数据到 rizin 底层字节写入的完整调用链帮助你在调试会话中快速修补栈上数据、验证攻击原语或修正运行时状态。关联文档与阅读前提本文对应的官方文档为 stack-widget-context-menu.rst该文档记录了 Stack 控件右键菜单中 “Edit Stack Value” 一项的用途与操作步骤。原文内容如下Edit Stack ValueDescription:Edit the value of the current stack item using a dialog.Steps:Right-click on an item in the Stack widget and chooseEdit stack value...to open the edit dialog.下面将围绕这条操作说明展开补充该功能的适用前提、操作细节、可输入格式以及底层实现原理。适用前提仅在调试/仿真会话中生效Stack 控件StackWidget在 Cutter 中用于“调试或仿真期间展示堆栈信息”源码注释原文为Widget listing stack information during debugging/emulation。其数据来源是 CutterCore::getStack函数开头即检查currentlyDebugging若当前没有进行中的调试或仿真会话直接返回空列表Stack 控件不会显示任何行堆栈起始地址通过 rizin 的角色寄存器查询取得rz_core_reg_getv_by_role_or_name(core, SP)即读取 SP栈指针寄存器的值随后按当前汇编位宽rz_asm_get_bits逐字遍历内存32 位架构按 4 字节、16 位架构按 2 字节为步长读取堆栈项并调用getAddrRefs解析每个地址的引用信息。因此右键菜单中的 “Edit stack value...” 只有在已经启动调试或仿真并暂停到某个断点/时刻后才具有实际意义——没有有效的 SP 与堆栈帧编辑操作无从谈起。这也是 “当前堆栈项”current stack item这一说法的来源菜单操作的对象是 Stack 表格中当前选中的那一行。操作步骤右键打开菜单选择 Edit stack value...官方文档给出的操作路径为在 Stack 控件中右键点击任意一项选择Edit stack value...打开编辑对话框。对应到源码实现StackWidget.cpp构造函数中创建动作editAction new QAction(tr(Edit stack value...), this)并将其加入addressableItemContextMenu通用可寻址项右键菜单表格视图viewStack设置Qt::CustomContextMenu上下文菜单策略第 34 行右键信号customContextMenuRequested连接到customMenuRequested该槽函数把请求坐标映射到全局坐标后弹出菜单第 96-99 行。也就是说你在界面上看到弹出的并非 Stack 控件专属菜单而是 Cutter 通用右键菜单 AddressableItemContextMenuStack 控件在此基础上追加了 “Edit stack value...” 一项。该通用菜单还包含Show in将地址展示到其他控件子菜单动态生成Copy address复制当前地址到剪贴板Show Xrefs打开交叉引用对话框Add/Edit Comment添加或编辑注释根据是否已有注释动态切换文案Add/Remove Breakpoint切换断点仅在调试模式下启用插件扩展菜单插件可通过MainWindow::ContextMenuType::Addressable扩展点注入自己的菜单项。菜单顶部还有一个根据当前选中列动态变化的提示文本选中 Offset 列时显示 “Stack position”堆栈位置选中其他列时显示 “Pointed memory”所指向的内存见 onCurrentChanged 中的menuText.setText(...)。通过双击快速跳转顺带一提除右键菜单外Stack 表格还支持双击导航onDoubleClicked双击 Offset 或 Value 列会Core()-seek(item)跳转到对应地址其中双击 Offset 列额外打开十六进制视图Hexdump双击 Value 列则打开默认内存视图。这与右键菜单共同构成堆栈项快捷操作的两个入口。编辑对话框Edit stack at选择 “Edit stack value...” 后触发 StackWidget::editStack其处理流程为通过表格selectionModel()-currentIndex()取得当前选中行从OffsetColumn读取该行偏移地址十六进制字符串创建 EditInstructionDialog构造参数使用EDIT_NONE模式并将窗口标题设为 “Edit stack at offset”从ValueColumn读取该行当前值旧字节串作为编辑框初始内容对话框确认后取回新输入若与旧值不同则调用Core()-editBytesEndian(offset.toULongLong(ok, 16), bytes)写回内存。EDIT_NONE 模式下的对话框形态EditInstructionDialog通过构造参数InstructionEditMode枚举定义见 EditInstructionDialog.hEDIT_NONE、EDIT_BYTES、EDIT_TEXT决定表现形态。堆栈值编辑使用的是EDIT_NONE因此对照 EditInstructionDialog.cpp 与 EditInstructionDialog.ui“Fill all remaining bytes with NOP opcodes” 复选框被隐藏——堆栈值是数据而非指令不需要用 NOP 填充实时预览标签保持为空EDIT_NONE分支下updatePreview直接清空标签不做反汇编/汇编预览见 第 64-66 行对话框主体为单个文本输入框QLineEdit最小宽度 400px配合 OK / Cancel 按钮整体尺寸固定不可拉伸setInstruction(oldBytes)会把旧值填入输入框并全选文本selectAll方便你直接覆盖输入。输入格式支持数值表达式虽然界面上的输入框显示的是字节串但底层写入实际经过数值解析。当你在对话框中输入新值并确认后CutterCore::editBytesEndian 执行void CutterCore::editBytesEndian(RVA addr, const QString bytes) { CORE_LOCK(); const ut64 value rz_num_math(core-num, bytes.toUtf8().constData()); if (core-num-nc.errors) { return; } rz_core_write_value_at(core, addr, value, 0); emit stackChanged(); }关键点输入先交给 rizin 的数值表达式求值器rz_num_math解析因此除了十六进制字节如41414141外也支持十进制、0x前缀、寄存器名、符号名乃至数学表达式如esp8、0x8048000等 rizin 数值语法所能接受的形式解析出错则直接返回、不写入随后rz_core_write_value_at按当前架构字节序把解析出的ut64值写入目标地址写入成功后发出stackChanged信号StackWidget 构造函数 中已把该信号连接到updateContents因此修改后 Stack 表格会立即刷新你马上就能在 Value 列看到新值。旁路入口Value 列直接内联编辑除了右键菜单Stack 表格的 Value 列本身也被模型标记为可编辑StackModel::flags 为 ValueColumn 追加Qt::ItemIsEditable并且setData同样调用Core()-editBytesEndian第 233-247 行。只是构造函数中显式移除了DoubleClicked与AnyKeyPressed两种编辑触发方式第 29-31 行避免与双击跳转行为冲突。右键菜单的 “Edit stack value...” 因此成为该列最主要的编辑入口。表格结构速览为准确理解“当前堆栈项”所指这里补充 Stack 表格的列结构StackModel::headerData 与 enum Column列序枚举名表头文本内容说明0OffsetColumnOffset堆栈项地址十六进制1ValueColumnValue该地址处当前值可编辑2DescriptionColumnReference该地址的引用描述如指向的字符串/符号带颜色高亮3CommentColumnComment用户注释读取自getCommentAt其中 Value 列内容即 “Edit stack value...” 对话框的初始值与最终写入对象Offset 列的值则决定写入目标地址。右键菜单弹出前onCurrentChanged会把当前行的偏移地址对 Description 列则取其 Value 列同行的值通过Core()-math解析后设置为菜单的target确保后续 “Show in”“Copy address”“Show Xrefs” 等通用动作都作用于正确的地址。典型使用场景结合上述机制该功能在以下场景中尤为实用均需处于调试/仿真会话中运行时状态修补暂停在断点后直接改写某个局部变量或函数参数在栈上的值观察程序行为变化无需重启调试会话返回地址篡改实验找到栈上保存的返回地址Offset 列可见、Value 列可改修改其值以研究栈溢出/ROP 等漏洞利用原语配合双击跳转可快速确认改写后的跳转目标验证数值假设逆向分析时怀疑某处比较逻辑读到的栈值用表达式形式如直接输入计算式快速写入预期值验证反编译/反汇编结论。需要注意的是该功能写入的是目标进程的栈内存属于对运行中程序的实时修改若修改导致程序崩溃或状态异常属于调试过程中的正常现象可通过重新启动调试会话恢复初始状态。小结Stack 控件右键菜单中的 “Edit stack value...” 是 Cutter 在调试/仿真场景下修改栈上内存值的最直接入口右键选中行 → 在对话框中输入新值 → 经rz_num_math求值 →rz_core_write_value_at按字节序写回 → 触发stackChanged刷新表格。整个过程由 StackWidget.cpp 的editStack、EditInstructionDialog.cpp 的输入交互与 Cutter.cpp 的editBytesEndian三部分协作完成。结合同菜单下的跳转、复制地址、查看交叉引用、添加注释与断点切换等通用动作Stack 控件构成了一个完整、可操作的运行时栈视图工作台。赞分享应用安全桌面应用开发工具【免费下载链接】cutterFree and Open Source Reverse Engineering Platform powered by rizin项目地址https://gitcode.com/gh_mirrors/cu/cutter点击查看免费下载相关推荐Cutter 断点部件右键菜单完全指南编辑、切换与删除断点Cutter 断点部件右键菜单完全指南编辑、切换与删除断点 Cutter基于 rizin 的开源逆向工程平台的 Breakpoints 部件集中展示当前调应用安全桌面应用开发工具彻底掌控Windows右键菜单ContextMenuManager终极操作指南彻底掌控Windows右键菜单ContextMenuManager终极操作指南 想要告别杂乱无章的Windows右键菜单吗ContextMenuManage桌面应用系统工具Hexdump Widget 右键菜单完整指南从每行字节数到二进制补丁写入Hexdump Widget 右键菜单完整指南从每行字节数到二进制补丁写入 Hexdump 视图是 Cutter基于 rizin 的自由开源逆向工程平台中应用安全桌面应用开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/11 13:16:14

BrewUI评测:用图形界面拯救Homebrew命令行新手

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 13:47:27

从源码构建LLVM:深入理解编译器基础设施与Clang优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/11 18:05:57

武汉考电工证靠谱官方回应外省证书如何转过来

武汉考电工证靠谱官方回应外省证书如何转过来 之前考的证在外省能不能转过来?这是不少在外地工作又想回武汉发展的朋友最关心的问题。特别是像三门峡的转岗从业者,很多人都会面临证书转接的问题。根据 河南省应急管理厅…

2026/11/11 18:05:57

电工证急需上岗?国网怎么查电工证通过率揭秘

电工证急需上岗?国网怎么查电工证通过率揭秘 你手上还差一张电工证,却连面试机会都没拿到?别再等了, 急需特种作业证才能上岗找工作 的你,现在就必须搞清楚 国网怎么查电工证 ,否则不仅影响你的求职进度,还可能错过关键的复审时间。…

2026/11/11 18:05:57

电工证延长复审期怎么搞?2026河南最新政策来了

电工证延长复审期怎么搞?2026河南最新政策来了 你是不是也遇到过这种情况:电工证快到期了,不知道去哪儿复审,结果一拖再拖,证就过期了?别急,2026年河南最新政策对电工证延长复审期有明确说明,下面我来给你说说门道。…

2026/11/11 18:05:57

工地太忙根本没时间复习考试?退税可以添加电工证通过率揭秘

工地太忙根本没时间复习考试?退税可以添加电工证通过率揭秘 工地太忙根本没时间复习考试?这几乎是每个在工地打工的电工都遇到过的现实问题。尤其是现在政策对特种作业操作证的要求越来越严格,很多工人在忙于生计的同时,还要抽空去准备考试,压力巨大。但…

2026/11/11 18:00:57

怎么审特种作业操作证网上查询全攻略

怎么审特种作业操作证网上查询全攻略 你是不是也遇到过这样的问题?手里拿着一份工作offer,却因为没有特种作业操作证被卡住?现在越来越多的岗位,尤其是建筑、电力、化工等行业,都明确要求持证上岗。…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑