# 借助 Ghidra 恢复 NativeAOT 元数据

> 在 REA 的 Ghidra 分析中，从 x64 PE 可执行文件恢复 .NET 8 NativeAOT 元数据：通过内置只读解析器或可选的无界面适配器（会为 Ghidra 数据库添加注释），从 RTR 9.1 数据中取得 MethodTable 关系、虚表槽位与冻结字符串。生成的名称、推断的原型和恢复的原生伪代码，与未知的原始 C# 名称、字段和源码明确区分。

- 类型：文档
- 目标：二进制
- 类别：REA 官方：调查指南
- 关联：REA 官方文档
- 来源复核于：2026-10-18
- 收录于：2026-10-18
- 原始资源：<https://github.com/morluto/rea/blob/main/docs/ghidra-nativeaot.md>
- 一手来源：<https://github.com/morluto/rea/blob/093ce695f0a7c3407c7fde520ed8b20c0981b408/docs/ghidra-nativeaot.md>
- 目录页面：<https://awesomerea.org/zh/resources/rea-ghidra-nativeaot-guide/>
- 记录 JSON：<https://awesomerea.org/resources/rea-ghidra-nativeaot-guide/record.json>
- 英文版：[English](https://awesomerea.org/resources/rea-ghidra-nativeaot-guide/index.md)

## 使用条件与局限

- 审阅时 main 上为 rea-agents 6.7.0，声明支持 Node ^22.19.0、^24.11.0 或 26 及以上。需自备 Ghidra 与 JDK；指南中的 Windows 检查使用 Ghidra 12.1.4 与 JDK 21。内置解析器支持带 .NET 8 RTR 9.1 元数据的 x64 PE32+，要求 RTR 头唯一且恰有一行 DEHYDRATED_DATA；其他 RTR 版本与 PE 架构会报告为不支持或部分覆盖。普通 PE/CLI 或 ReadyToRun 程序集应改用 REA 的托管代码工具。
- 可选适配器需用现有的 git、javac 与 jar，从固定版本且未修改的 Washi1337/ghidra-nativeaot 检出构建；REA 记录 JAR 的 SHA-256，复制后在加载前重新校验摘要。JAR 在 Ghidra 内执行，请使用可信的构建。适配器在临时 Program 事务中添加注释，从不修改原始可执行文件。它在 Windows Ghidra P0 上不可用；在该环境中，读取数据库的工具看不到重新水合的字节，槽位目标来自解析器报告。
- 输出包括 MethodTable 地址、基类型、接口、虚表槽位与冻结字符串，并受文档列明的本地上限约束，例如采集的 PE 字节最多 128 MiB、报告 JSON 最多 4 MiB；超出报告预算的行会被省略并标为部分覆盖。类型识别采用上游的启发式方法，方法原型仍属推断。伪代码是恢复的原生逻辑，并非原始 C# 源码；原始类／成员名称及自定义字段布局仍然未知。
- 验证使用自行构建的无害 .NET 8.0.22 测试程序，以独立的编译器／链接器符号和目录字节作为对照基准，另有去除符号的样本和负面输入；测试程序从不执行，构建它们需要 .NET SDK 8.0.416 及对应平台的 NativeAOT 工具。真实 MCP 测试流程只在装有适配器的 Linux x64 主机上运行。Windows 主机行为仅在 Windows 11 x64 上不带 JAR 手动检查过一次，对照测试程序基准与链接映射；没有 CI 流程重复该检查。
- REA 声明 MIT。解析器的水合语义改编自 Washi1337/ghidra-nativeaot（MIT，其声明随附于 licenses/ 目录），并对照 .NET 的 MethodTable.h 核对。被分析的可执行文件保留各自许可。已合并的 PR #748 引入了该集成，issue #744 记录了相应请求及其关闭。

## 一手来源

1. <https://github.com/morluto/rea/blob/093ce695f0a7c3407c7fde520ed8b20c0981b408/docs/ghidra-nativeaot.md>
2. <https://github.com/morluto/rea/blob/093ce695f0a7c3407c7fde520ed8b20c0981b408/docs/testing.md>
3. <https://github.com/morluto/rea/blob/093ce695f0a7c3407c7fde520ed8b20c0981b408/licenses/nativeaot-parser-MIT.txt>
4. <https://github.com/morluto/rea/blob/093ce695f0a7c3407c7fde520ed8b20c0981b408/package.json>
5. <https://github.com/morluto/rea/blob/093ce695f0a7c3407c7fde520ed8b20c0981b408/LICENSE>
6. <https://github.com/morluto/rea/pull/748>
7. <https://github.com/morluto/rea/issues/744>

## 同分区更多条目：文档与学习资源

- [REA & AI RE Tools Guide（非官方）：REA 安装、接入与故障排查社区指南](https://awesomerea.org/zh/resources/reaguide-unofficial-rea-guide/index.md) · 学习资源
- [OpenSecurityTraining2](https://awesomerea.org/zh/resources/ost2/index.md) · 学习资源
- [pwn.college：逆向工程](https://awesomerea.org/zh/resources/pwn-college-re/index.md) · 学习资源
- [逆向工程入门](https://awesomerea.org/zh/resources/re-for-beginners/index.md) · 学习资源
- [radare2 官方手册](https://awesomerea.org/zh/resources/radare2-book/index.md) · 学习资源
- [LLM4Decompile（EMNLP 2024）](https://awesomerea.org/zh/resources/llm4decompile-paper/index.md) · 研究

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
