Skip to content

输出格式与错误码

SoFixer-skills-CLI 全部输出都是单行 JSON,便于 AI agent 用标准 JSON 解析器读取,而非正则猜人类日志。

统一信封

无论哪个子命令,输出都遵循同一结构:

json
{
  "ok": true | false,
  "tool": "SoFixer-skills-CLI",
  "arch": 32 | 64,
  "command": "fix | info | verify | version | help",
  "result": { ... }     // ok=true 时
  "error": { ... }      // ok=false 时
}

字段:

字段说明
ok唯一权威成败标志。AI 应只看它判断成功与否。
arch本次二进制的位宽(32 或 64),告诉 AI 当前是哪个变体
command触发的子命令名
result成功时的结果对象,各命令不同(见 fix/info/verify
error失败时的错误对象

错误对象

json
"error": {
  "code": "load_failed",
  "message": "source so file is invalid",
  "stage": "ElfReader::Load"
}
字段说明
code机器可读的稳定错误码,API 跨版本保持兼容,AI 据此分支
message人类可读描述(措辞可能随版本调整,不要据此判断)
stage失败发生在哪个阶段(如 ElfReader::LoadElfRebuilder::Rebuild

错误码表

code含义处理建议
load_failed源文件非合法 ELFinfo 探测;检查文件是否完整
class_mismatchELF 位宽与当前变体不符换 CLI32 ↔ CLI64 重试
open_output_failed输出文件无法写检查目录权限/路径
membase_invalid-m 不是合法十六进制0x 前缀
rebuild_failed修复阶段失败error.stage,常见是 dynamic 段损坏
verify_failed校验有失败项summary 的失败项
unknown_command未知子命令help 查可用命令
unknown_option未知选项help 查选项 schema
missing_required缺必填选项error.message 指出的选项
internal_error未预期内部错误提 issue,附完整命令与输出

64 位地址的处理

JSON Number 本质是 IEEE 754 double,只能精确到 2^53。SO 的 64 位虚拟地址会超出。因此 CLI 中所有 64 位地址、entryvaddr 等字段都用十六进制字符串输出(如 "0x7db078b000"),AI 解析后按需转成数值即可。

退出码

CLI 同时用退出码表达结果,方便 shell 脚本和 AI 判断:

退出码含义对应情况
0成功ok: true
1业务失败ok: false,输入/修复/校验层面的问题
2参数错误unknown_command / unknown_option / missing_required
3内部错误internal_error

AI 可据此一句话分流:退出码 2 → 修正调用方式(换命令/补选项);1 → 换输入或排查数据;0 → 读 result

自省:help

不确定某个命令的选项时,调 help(或 --help)拿结构化 schema:

bash
SoFixer-skills-CLI64 help

返回每个命令的 namedescriptionoptions(含 long/short/takes_value/required/help)。AI 无需查阅文档即可自省 CLI 能力。

基于 VitePress 构建