跳转至

原生函数摘要验证 — 2026-10-23

行为与来源

MCP analyze_function 默认使用紧凑的派生摘要。完整的 函数 Evidence 会保留在会话中,并可通过返回的 parent_evidence_id 在 inspect_analysis_view 中选取。detail: "complete" 保留历史完整回复。交付细节保持在提供方输入和父 Evidence 标识之外。 此 MCP 默认行为属于破坏性变更。

CLI rea function 仍默认输出完整结果。选择摘要 需要独占的 --evidence_output 捆绑目标。认证后的 捆绑可通过绝对 evidence-file 来源和显式记录 ID 在提供方关闭后分页查阅。普通记录也遵循显式 ID。

该实现复用了现有的 JSON 认证/余量所有者,以及 一个捆绑认证函数,用于导入和文件视图。每个请求仅读取 一个文件一次。模糊捆绑引导保留完整 ID,并将 JSON 编码的引用预览限制为 2 KiB,省略超大的操作标签。 原生摘要继承函数位置和关系覆盖范围;省略 或不可用的事实保持未知状态,而不会变为零。

已测来源:

  • 之前:fb6c88d518ab9b84ed396cf82dcb1c28a608c501。
  • 之后:4e3d930ada93014efa43610265b58307de49a687。
  • 测试框架 SHA-256:d67b23db21024361b34f796add1ff91bf3fbcda1991ea9e369ef8bcf64c71ec4。
  • Linux x86-64;固定 Node 24.22.1 / npm 11.16.0;自带 Ghidra 12.1.4 和 JDK 21.0.12.1+1。无目标执行。
  • 目标 SHA-256: 9c49d2eef9c2083f6f66f38de4ed0ee1bac17ca5b73dc8f3a90d9ba62a8d1d5d。 其 3,000 分支 C 源码是超时验证器测试夹具,SHA-256 f99074876faae8e18e45265dab007b6fcc396fe909d57efab72adc8925a960c7。 已知条目 0x1010f9 和 0x128ed6 仅适用于此确切工件。

已完成的公共 MCP 对比

一个全新的生产环境 stdio MCP 客户端发现全部 221 个工具,打开目标, 然后获取两个答案:小函数的标识、可用性/计数和 完整伪代码;以及大函数的标识、可用性、汇编/ 块计数和前 20 行汇编。它在同一会话中 重复两次读取,执行一次匹配的完整小函数兼容性读取后关闭。

之前,每个默认函数回复都携带完整档案。之后,每个 答案使用默认摘要和一页保留的 Evidence。两条通道均使用 一秒原生反编译限制、明确的 600 秒 SDK 工具截止时间 和匹配的 128 MiB 服务器/客户端接收预算。所选事实在 不同实现和轮次之间一致。大函数有 45,007 行汇编 和 9,001 个块,伪代码不可用;小函数伪代码为 64 字节,SHA-256 c947ff22cab1ffef9b962b12d82e12d0e5f5e2a6c5634a2ed5ea3c353e1d5807。 每次运行在其任务期间保持了相同的已观测 JVM 启动标识,并 在目标摘要不变的情况下完成清理。

整体基准 之前 之后
估算交换 Token 44,217,047 1,033,322
耗时秒数 237.715 128.600
等待的进程族 CPU 秒数 211.656 123.083
采样的进程族 RSS MiB 3951.7 2827.8
目录/工具交换 8 12

此已完成任务的估算上下文下降 97.66%,包括更大的目录和 四次额外分页调用。仅目录本身就从 982,457 增长到 985,662 个估算 Token。完整小函数兼容性读取仍包含在两个总计中。

MCP 阶段耗时秒数 之前 之后
首次小函数,含延迟 JVM 启动 80.3747 69.0745
首次大函数,JVM 已预热 57.2394 19.8205
重复小函数 0.0534 0.0601
重复大函数 56.4148 19.7744

重复小函数任务增加了一次分页调用,在此 配对中耗时约多 6.7 毫秒。大型部分档案保持活跃并重试原生分析;健康的 小函数快照复用仍然可用。此变更减少了代理 输出及其序列化/传输工作,同时仍生成并保留 完整的父档案。

Token 是 tokenx 1.3.0 对实际目录、参数和完整 SDK 结果的估算,包括文本和结构化投影。协议帧、 握手、提示、客户端渲染/重放和实际模型使用 均未计量。整体基准包括 Token 估算、哈希、资源 采样和交换文件写入。汇总的已计量 MCP 阶段排除 后续计数/写入开销:217.327 → 127.538 秒。 整体基准时间不得作为纯提供方分析时间来呈现。

Node 堆为 2 GiB,Ghidra 堆为 1 GiB,亲和 CPU 0/1,Java 活动 处理器数为二。所观测进程族的提前停止保护允许 6 GiB RSS、 600 秒 CPU 和 900 秒耗时;两次完成的运行均未触发保护。 RSS 每 50 毫秒通过递归 /proc 观测采样一次。共享 页面可能被重复计数,短暂/未被观测到的子进程转换可能被 遗漏;这不是内核 cgroup 峰值或硬性进程族内存限制。等待 CPU 包含已回收的后代进程。基线先运行,操作系统缓存未刷新, 主机与其他工作共享。这是一次配对调查, 具有上述冷/结果缓存区分,而非普遍性的速度声明。

早期基线尝试使用 240 秒 SDK 截止时间,并首先 处理大函数。它超时后成功关闭;整个尝试耗时 280.628 秒,等待 CPU 219.562 秒,未触发资源保护停止。 其失败的接收/交换保持独立。它被排除在已完成任务 比较之外。最终配对在两种实现上使用相同的更长截止时间和任务顺序。

公共 CLI 与保留文件

真实的默认 CLI 命令返回了一个完整的小函数档案,并带有预期的伪代码(耗时 70.627 秒,CPU 70.034 秒)。第一个验证框架假设只有裸 Evidence,未能解包成功的公共 ok/data/meta 封装。修正该框架后,其已完成的记录和输出得到了验证并被复用,而无需再次进行提供者分析。

summary CLI 命令分析了大函数,并写入了一个 29,141,012 字节的捆绑包。它在 78.163 秒内返回了一个 8,499 字节的摘要封装,CPU 时间为 94.196 秒,采样到的进程族 RSS 为 2,381.2 MiB。两个全新的 CLI 进程在 Ghidra 安装路径不可用的情况下验证了该捆绑包,并返回了其前 20 行和末尾 20 行汇编行。覆盖报告显示总计 45,007 行,延续与耗尽均正确。目标摘要保持不变。

那些独立的文件分页命令分别耗时 17.218 / 18.175 秒,CPU 时间为 15.150 / 17.015 秒,RSS 约为 666 / 669 MiB。每个全新的命令都会读取并验证完整的捆绑包;这并非亚线性磁盘访问,也不是跨进程缓存。完整证据仍保留在调用方的文件中。

验证与限制

  • 在与 main 分支 a062529bb2aa064be37e82df39c59c4fa798fe50(源码 b7c3f0cd79c4a02b135da56fff06de08dd456ff7)集成后,完整的 npm run check 通过。docs:check 也通过。
  • 最新的聚焦 contract/progress/snapshot/local-path 运行通过了 139 项测试;所测集成的选定运行通过了 136 项,更早的一次更广泛的 CLI-selector/contract 运行通过了 169 项。重叠部分不计入总和。更早的 domain/Evidence 运行有 87 次通过和一次遗留的 progress-fixture 失败。explicit-complete fixture 和新 summary 的递增通知随后在一个单独的 8 用例 MCP 运行中通过。
  • 实际的 SDK/schema 检查在重新生成被忽略的测试目录元数据后,全部 15 个用例均通过。初始运行有 14 次通过和一次陈旧目录相等性失败;其记录已保留。
  • 上述生产环境下的 CLI/MCP 观测使用真实的 Linux 版 Ghidra。Hopper、IDA、Kuna、macOS 和 Windows 的行为仅在选定的源码/边界测试范围内得到覆盖,并未进行新的真实提供者验证。
  • 早期的源码集成修复和后来的 main 分支更改并未包含在每一个历史测试/性能基准点中。所测的那一对运行仍与上述明确的源码提交绑定。

原始交换、协议观测、控制失败、脚本和资源记录均保留在 /tmp/rea-maintenance-20261023/5660/ 之下。提供者项目、生成的二进制文件、构建输出和本地规划文件不会被提交。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea