SuperAPI AI 工具集

pyghidra-scripting

编程与开发

查看项目

更新于 10-16 05:04

技能介绍

用途:该技能让助手在 ReVa 的 MCP 服务器已接入的同一 Ghidra 会话内,用 Python(PyGhidra,CPython 3 + JPype)编写并执行脚本,从而访问完整 Ghidra Java API(FlatProgramAPI、DecompInterface、FunctionManager 等)。当 ReVa 现有结构化工具无法满足需求时,run-script 作为逃生通道使用。

主要能力:提供五个 MCP 工具。run-script 对程序执行 Python,可传内联代码或 scriptPath/scriptName;list-scripts 枚举已注册目录中的脚本,可按名称/路径过滤并分页;read-script 以带行号方式查看脚本,支持 offset/limit;write-script 创建新 .py 文件或整体覆盖,仅限可写目录;edit-script 做 old_string→new_string 替换,多处匹配时报错,除非 replace_all: true。

使用方式:run-script 仅在 Ghidra 以 PyGhidra 启动时可用(mcp-reva、pyghidra-gui、reva_headless_server.py);普通 ghidraRun 会返回 PyGhidraNotAvailableException。脚本预绑定 currentProgram、monitor 等全局变量,内联代码会自动加 # @runtime PyGhidra 头。变更操作必须手动开启事务:tx = currentProgram.startTransaction("..."),成功 endTransaction(tx, True),异常时 endTransaction(tx, False)。长循环需定期检查 monitor.isCancelled(),否则超时(默认 60 秒,可用 timeoutSeconds 覆盖)不会生效。stdout/stderr 各默认上限 64K 字符,超出会标记截断。

适用场景:对全部函数/符号/指令运行自定义谓词、合并多次 API 调用、使用 ReVa 未暴露的 Ghidra API(PCode、数据流、BinaryReader 等)、原型验证后保存为可复用脚本。

限制:专用 ReVa 工具已覆盖的场景不应使用 run-script;脚本路径须位于已注册脚本目录内;内联代码与保存脚本均忽略 # @category 等 GUI 元数据;Java byte 为有符号,需 b & 0xff;部分迭代器只支持 hasNext()/next();DecompInterface 应复用并及时 dispose()。缺失信息:未提供具体安装命令、收费与平台细节。