-
-
[推荐]2116 指令集归纳推理引擎 (通用指令架构和反汇编引擎生成器)
-
发表于: 2天前 698
-

有人说:世上无龙,要屠龙术又有何用?
当未来龙出现时,人类不应该束手无策 ~
快速上手:563K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3q4K6L8e0j5@1i4K6u0W2j5$3!0E0i4K6u0r3x3U0p5I4y4W2)9J5k6h3S2@1L8h3H3`.
下载地址:acfK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3q4K6L8e0j5@1i4K6u0W2j5$3!0E0i4K6u0r3y4K6R3^5y4p5c8G2N6$3&6Q4x3X3g2Z5N6r3#2D9
## 它是什么?
2116 指令集归纳推理引擎 (通用指令架构和反汇编引擎生成器),它做的事情和传统反汇编工具不一样。
传统工具需要你先告诉它 "这是 ARM 程序" 或 "这是 x86 程序",然后帮你分析程序逻辑。
2116 相反:你什么都不用告诉它,只给它一段完全未知芯片的二进制,它会用归纳推理的方法,从 0 开始搞清楚这个芯片的指令集是什么,然后生成一个专属的反汇编引擎。
## V0 架构 15 步:从零到一的魔法
2116 分析二进制程序的过程,就像一个侦探破案,总共 15 个步骤:
### 第 1 步:拆包加载
先把 ROM 包装拆开(比如 NES 游戏的 iNES 头),把几百个同架构的程序都读进来。
### 第 2 步:资源探测
看看里面有没有图片、音乐、字体这些东西,先标记出来,免得后面当成代码分析了。
### 第 3 步:统计特征
统计每个字节出现的频率、字节序列的规律,看看哪些地方像代码,哪些地方像数据。
### 第 4 步:边界探测
猜一猜指令是定长的还是变长的?每条指令有几个字节?找出可能的指令边界。
### 第 5 步:识别操作码
哪些字节是操作码?它们是怎么编码的?用前缀树、聚类这些方法找出来。
### 第 6 步:划分操作数
剩下的部分哪些是寄存器编码?哪些是立即数?哪些是内存地址?
### 第 7 步:归纳寻址模式
这些操作数是怎么用的?是直接寻址、间接寻址、还是变址寻址?
### 第 8 步:分析控制流
哪些是跳转指令?跳到哪里?哪些是函数调用?把程序的控制流图画出来。
### 第 9 步:推断寄存器文件
有多少个通用寄存器?哪个是程序计数器 PC?哪个是栈指针 SP?
### 第 10 步:分离代码和数据
哪些区域是真正的代码?哪些是数据、字符串、填充?
### 第 11 步:分类和标注
这条指令是 MOV 还是 ADD?是 JMP 还是 CALL?给它们打上语义标签。
### 第 12 步:迭代收敛
上面这些步骤不是一次性做好的,要多轮迭代,互相验证,直到结果稳定下来。
### 第 13 步:指令分析
统计每个操作数怎么用的,寄存器的读写规律,数据流是怎样的。
### 第 14 步:仿真测试
把推断出来的指令集放进仿真器里跑跑看,看看逻辑顺不顺,有没有自相矛盾的地方。
### 第 15 步:生成结果
最后输出三样东西:可独立运行的反汇编引擎 C 代码、指令集说明文档、分析报告 HTML。
---
## 它能做什么?
- 从纯二进制样本中推导未知指令集的编码规律
- 识别可能的指令和它们的边界
- 区分代码区域和数据区域
- 生成可读的反汇编代码
- 检测嵌入的资源(图片、声音等)
- 输出可独立运行的交互式反汇编引擎
---
## 独白
有人说:世上无龙,要屠龙术又有何用?
为什么做?谁会用?
我们认为:当未来某一天,龙真的出现的时候,人类不应该束手无策。
因为可以分析任何未知,本身就是一种威慑。
---
## V0 发布
这是 V0 版本。它已经可以工作了。
---
**发布日期**:2026年5月17日
**状态**:V0
**语言**:C