Files
reverse-skills-max/vendor-new/rev-skills/docs/superpowers/specs/2026-08-18-lang-skills-design.md

103 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 4 个语言逆向技能设计(2026-08-18)
## 背景
rev-skills(97 技能)语言逆向覆盖目前只有 re-go / re-rust。用户确认新增 4 个语言技能:Swift / Zig / Nim / 函数式运行时(Haskell+OCaml 合并)。
设计约束(沿用全库红线与原则):
- **红线 1 呈现中性**:禁用「最推荐」「强烈建议」等最高级强推措辞
- **红线 2 隐私脱敏**:内容不指向具体项目/公司/产品
- **不绑定具体工具**:方法为核心,工具为可替换示例(工具准备保留跨 OS 安装指引)
- 工作区已干净(无未提交文件)——re-binary-core 可正常修改提交
- 当前分支 `main`
## 变更总览
| # | 新技能 | 类型 | 挂载 | 计数 |
|---|---|---|---|---|
| 1 | re-swift | 原子 | re-binary-core | 98 |
| 2 | re-zig | 原子 | re-binary-core | 99 |
| 3 | re-nim | 原子 | re-binary-core | 100 |
| 4 | re-fp-runtime | 原子 | re-binary-core | 101 |
最终:101 技能 = 1 入口 + 12 网关 + 88 原子。
## ① re-swift(Swift 生态)
- **定位**:Swift 二进制逆向——mangling、协议 witness table、闭包捕获、ObjC 互操作
- **frontmatter**:`name: re-swift`;触发词:Swift逆向、swiftc、witness table、swift demangle、闭包捕获、Swift 产物
- **章节**:
1. 何时使用 / 何时不用——用:Swift 产物(Mach-O/ELF 含 Swift mangling 特征);不用:纯 ObjC(走 [[re-ios]] / [[re-macos]] 的 ObjC 路径)
2. 工具准备——swift-demangle(Swift 工具链)、llvm-objdump、Ghidra/IDA;跨 OS 安装命令
3. 操作步骤——
1. 产物识别(`$s` mangling 前缀、swift_* 运行时导入)
2. mangling 解码(swift-demangle 批量:类型/函数/泛型展开)
3. 协议 witness table(协议方法分发表定位与还原)
4. 闭包捕获(context 结构:捕获变量布局还原)
5. ObjC 互操作(@objc 桥接、NSObject 子类、消息发送路径)
4. 跨域联合——[[re-binary-core]] 网关;[[re-ios]] / [[re-macos]] 生态衔接
5. 常见坑与陷阱——mangling 版本差异、泛型展开符号爆炸、witness table 无符号名、闭包捕获含引用语义
- **挂载**:re-binary-core 子技能列表 + 选择树分支;re-ios / re-macos 跨域引用
## ② re-zig(Zig 产物)
- **定位**:Zig 编译产物逆向——ABI 简单(无 RTTI/无异常)、comptime 展开、panic/错误处理路径
- **frontmatter**:触发词:Zig逆向、zig、comptime、zig 产物、panic
- **章节**:
1. 何时使用 / 何时不用——用:Zig 产物(无 C++ RTTI/异常表、panicking 函数特征);不用:C/C++ 产物(走 [[re-cpp-abi]])
2. 工具准备——readelf / llvm-nm、Ghidra/IDA;跨 OS 安装
3. 操作步骤——
1. 产物识别(panicking 函数特征、std 符号模式、无 RTTI/异常表)
2. 导出符号与启动路径(start/main、comptime 展开产物)
3. panic/错误处理路径(错误联合类型布局)
4. C ABI 边界(@extern/@cImport 产物识别)
4. 跨域联合——[[re-binary-core]] 网关;[[re-cpp-abi]] 边界区分
5. 常见坑与陷阱——comptime 展开导致符号膨胀、panic 路径误导、错误联合布局版本差异、与 C 混合编译难分界
- **挂载**:re-binary-core
## ③ re-nim(Nim 产物)
- **定位**:Nim 编译产物逆向——GC/异常运行时、NimString、导出符号
- **frontmatter**:触发词:Nim逆向、nim、NimString、NimMain、nim 产物
- **章节**:
1. 何时使用 / 何时不用——用:Nim 产物(NimMain/GC 符号特征);不用:C 产物(走 [[re-binary-core]] 通用)
2. 工具准备——readelf、Ghidra/IDA;跨 OS 安装
3. 操作步骤——
1. 产物识别(NimMain / GC 符号、NimString 结构特征)
2. 字符串与序列结构(NimStringV2 布局:len/reserved/data)
3. 异常与 raises 路径(Nim 异常机制)
4. GC 与引用计数(refc/orc 差异)
4. 跨域联合——[[re-binary-core]] 网关
5. 常见坑与陷阱——GC 版本差异(refc/orc)、NimString 布局随版本变化、导出符号被 strip、C 混合编译
- **挂载**:re-binary-core
## ④ re-fp-runtime(函数式运行时:Haskell / OCaml 合并)
- **定位**:函数式语言运行时逆向——GHC RTS 与 OCaml runtime 的闭包/堆模型;逆向着重数据流而非控制流
- **frontmatter**:触发词:Haskell逆向、OCaml逆向、GHC RTS、thunk、STG、OCaml runtime、闭包、函数式产物
- **章节**:
1. 何时使用 / 何时不用——用:Haskell/OCaml 产物(RTS 符号、block 头特征);不用:命令式语言产物(各归各技能)
2. 工具准备——readelf、ghc 工具链(ghc-nm 等)、ocamlobjinfo、Ghidra/IDA;跨 OS 安装
3. 操作步骤——
1. 运行时识别(GHC RTS 符号 / OCaml block 头;字节码 vs 原生产物区分)
2. 闭包与堆对象(GHC thunk/CAF 布局;OCaml tagged int / block 头)
3. 调用约定(GHC 栈/寄存器约定;OCaml 参数传递)
4. 分析策略(数据流优先——函数式产物控制流被打散,闭包字段与构造器是主要线索)
4. 跨域联合——[[re-binary-core]] 网关
5. 常见坑与陷阱——RTS 版本差异、thunk 惰性求值误导(未求值闭包 vs 已求值)、OCaml 字节码非 native、控制流打散导致静态分析失效
- **挂载**:re-binary-core
## 同步
- re-binary-core:子技能列表加 4 个 + 选择树加 4 分支(目标语言 → 对应技能)
- re-ios / re-macos 跨域联合各加一行 [[re-swift]]
- README:技能导航(97)→(101)、「12 大类网关 → 84 原子技能」→ 88、re-binary-core 导航行加 4 个
- AGENTS.md:(97 个技能)→(101 个技能)、原子技能(84)→(88)
- marketplace.json:97 个技能 → 101 个技能
## 校验与测试
- validate.mjs 自动覆盖 4 个新技能(frontmatter name=目录名 / type=atomic / 工具准备 / 链接)
- `npm test` 全绿(101 skills validated)
- 工作区已干净,无未提交文件冲突