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),仅供参考

相关新闻

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

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/9/22 17:20:25 阅读更多 →
NumPy 2.4.4 补丁版本发布解析:OpenBLAS ARM 线程问题修复与源码级变更详解

NumPy 2.4.4 补丁版本发布解析:OpenBLAS ARM 线程问题修复与源码级变更详解

科学计算数据分析 【免费下载链接】numpy The fundamental package for scientific computing with Python. 项目地址: https://gitcode.com/gh_mirrors/nu/numpy 点击查看 免费下载 NumPy 2.4.4 是 2.4.x 分支上的一个补丁(patch)发布&…

2026/9/22 23:40:42 阅读更多 →
免费离线OCR软件指南:3步把扫描PDF变成可搜索文档

免费离线OCR软件指南:3步把扫描PDF变成可搜索文档

免费离线OCR软件指南:3步把扫描PDF变成可搜索文档 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。…

2026/9/22 16:48:12 阅读更多 →

最新新闻

书霸AI:一篇期刊论文的诞生现场

书霸AI:一篇期刊论文的诞生现场

书霸AI官网www.shubaai.com晚上十点,小林还坐在电脑前。文件夹里堆着二十多篇文献,文档中却只有一个标题。他并不是没有想法,而是不知道怎样把零散材料整理成一篇结构完整、逻辑清楚的期刊论文。这也是论文写作中很常见的场景:真正…

2026/9/23 9:08:26 阅读更多 →
靶场攻略 | 记一次实验靶场练习笔记

靶场攻略 | 记一次实验靶场练习笔记

靶场攻略 | 记一次实验靶场练习笔记 前两天朋友分享了一个实验靶场,感觉环境还不错,于是对测试过程进行了详细记录,靶场中涉及知识点总结如下: War包制作regeorg内网代理工具的使用UDF漏洞利用Struts2-012漏洞利用Msfvenom模块的…

2026/9/23 9:08:26 阅读更多 →
基于深度学习的人脸情绪识别系统:从数据到部署的完整指南

基于深度学习的人脸情绪识别系统:从数据到部署的完整指南

简介:这份资源是面向人工智能、深度学习方向的毕业设计与课程设计参考项目,聚焦人脸情绪识别这一细分课题,适合具备Python基础、希望理解CNN图像分类与实时人脸检测如何协同工作的学习者。压缩包共11个文件,约11.89MB,…

2026/9/23 9:08:26 阅读更多 →
书霸AI期刊论文写作:返工后的6个启示

书霸AI期刊论文写作:返工后的6个启示

www.shubaai.com写期刊论文最消耗时间的,往往不是打字,而是反复推倒重来:题目看似明确,写到中途却发现研究问题不集中;章节已经齐全,论证之间却接不上;语言修改了很多遍,仍然不像规范…

2026/9/23 9:08:26 阅读更多 →
Python量化组合优化:市值加权/等权重/均值方差/最小方差四模型实战

Python量化组合优化:市值加权/等权重/均值方差/最小方差四模型实战

简介:本资源是一套面向量化投资初学者与Python金融实践者的多策略组合优化实战代码包,聚焦股票投资组合构建中的四种主流权重分配方法:市值加权、等权重、均值方差及最小方差模型,帮助用户理解风险收益权衡与实证建模逻辑。压缩包…

2026/9/23 9:08:26 阅读更多 →
开源AI编程工具链全解析:从本地模型到Agent实战

开源AI编程工具链全解析:从本地模型到Agent实战

1. 为什么写这篇:我在AI编程工具链里最终倒向了开源过去一年,AI编程差不多成了开发者社区最热的话题。从GitHub Copilot的普及,到Cursor的爆发,再到满屏的AI编程提示词教学,几乎每个群里都有人在讨论。我前前后后把商业…

2026/9/23 9:07:25 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →