用途:这是 Headless Ghidra 函数替换工作流的 P4 阶段技能,在 P3 之后使用。它消费当前选定的函数批次,应用增强后的元数据,运行已批准的 Ghidra 反编译路径,并记录每个函数的替换产物。
主要能力:通过 ghidra-agent-cli 执行重命名与签名的应用和校验、反编译、重建项目、替换项添加与校验,以及 P4 阶段门禁检查。锁定与 Ghidra 调用由 CLI 内部处理,公开工作流接口为 CLI 加 YAML 输出。
必要命令:ghidra-agent-cli ghidra apply-renames、ghidra-agent-cli ghidra verify-renames、ghidra-agent-cli ghidra apply-signatures、ghidra-agent-cli ghidra verify-signatures、ghidra-agent-cli ghidra decompile、ghidra-agent-cli ghidra rebuild-project、ghidra-agent-cli substitute add、ghidra-agent-cli substitute validate、ghidra-agent-cli gate check --phase P4。
输入:artifacts/<target-id>/ 下的 baseline、runtime/fixtures、runtime/hotpaths/call-chain.yaml、third-party/identified.yaml、third-party/pristine/<library>@<version>/、third-party/compat/<library>@<version>/(如需要)、metadata/renames.yaml、metadata/signatures.yaml、substitution/next-batch.yaml。当 substitution/next-batch.yaml 就绪时,只处理具有明确 P3 名称和签名的函数。
输出:artifacts/<target-id>/substitution/functions/<fn_id>/capture.yaml 与 substitution.yaml,以及工作流记录时的 blocked、injected 或 follow-up 等逐函数 YAML。
退出预期:在编写替代实现前记录函数级 I/O 夹具与 capture YAML;每个被替换函数都有含来源、夹具和状态的 substitution.yaml;P4 门禁材料位于 substitution/functions/<fn_id>/ 下。
限制:仅使用 Ghidra 作为反编译后端;后端需要时,在变更或读取共享 Ghidra 状态前先获取队列/锁;不得修改活动批次之外函数的产物;受支持的 apply/verify/decompile、替换、夹具或门禁操作不得绕过 ghidra-agent-cli;不得修改 pristine 第三方源码,本地适配改动放在 third-party/compat/ 下;若 CLI 缺少某能力,不得创建或运行新的 Ghidra 脚本,应先暂停并询问用户。
下一步:该批次 P4 门禁通过后,返回 P3 进行下一轮或结束。