# 固件所示并非应有的仿真方式：一种规范引导的固件仿真方法

> SEmu 依据厂商参考手册而非固件本身构建微控制器外设模型。一条基于 Stanford 词性标注器和句法分析器的 NLP 流程，把取自手册的寄存器说明、中断表和 DMA 通道表转换为结构化的条件—动作规则；仿真器在运行时检查、执行并串联这些规则，以响应 MMIO 访问并触发中断或 DMA 请求。基于 S2E 和 µEmu 的符号执行诊断工具会把无效状态回溯到可能出错的规则，供人工修正。作者还将这些模型用于模糊测试，以及依据规范规则检查驱动代码。

- 作者：Wei Zhou; Lan Zhang; Le Guan; Peng Liu; Yuqing Zhang
- 原标题：What Your Firmware Tells You Is Not How You Should Emulate It: A Specification-Guided Approach for Firmware Emulation
- 发表载体：ACM CCS 2022
- 发表状态：会议论文
- 出版／提交日期：2022 年 11 月 7 日
- 日期依据：ACM 提交的 Crossref 元数据将纸质和在线出版日期均记为 2022-11-07。本条目不以会议日期代替。
- arXiv 首次提交：2022 年 8 月 16 日
- arXiv：2208.07833
- 已复核的 arXiv 版本：v3
- DOI：10.1145/3548606.3559386
- 来源复核于：2026-10-27
- 收录于：2026-11-03
- 原始论文：<https://dl.acm.org/doi/10.1145/3548606.3559386>
- PDF：<https://arxiv.org/pdf/2208.07833v3>
- 代码：<https://github.com/MCUSec/SEmu/tree/6dc8be91f6809f34af972a93c9dd972f85145a00>
- BibTeX：<https://awesomerea.org/papers/citations/paper-semu.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-semu/>
- 记录 JSON：<https://awesomerea.org/papers/paper-semu/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-semu/index.md)

## 研究范围与局限

规则提取并非完全自动。NLP 引擎难以处理跨句指代和嵌套条件；三款单元测试芯片上时钟外设的原始规则都导致启动失败，因此在修订这些规则之前，P2IM 的 66 个单元测试全部失败。经诊断引导的人工修正后（在从 23,424 个句子中提取的 3,602 条规则中新增 26 条、修正 21 条、删除 3 条），作者报告全部 66 个单元测试以及另外 17 个样本均能仿真。用户需要识别 MCU、配置内存映射，并把所需的手册章节复制到流程中；诊断还需要事先准备测试固件。三名开发者修正 F103 I2C 规则平均约需两小时。原型覆盖三家厂商五款开发板（STM32F1、F4、L1，NXP K64 与 Atmel SAM3X）上的 26 种外设；轨迹保真度比较只在 K64F 和 F103RB 两块开发板上使用了真实硬件轨迹。规则所建模的是文档记载的行为，不能证明与芯片实物等价。

## 与本合集的关联

补充依据规范构建外设模型、用于重托管微控制器固件的方法，与 MMIO 建模和无效性引导推断等以固件为依据的方法互补。

## 发表与复核说明

Crossref 记录了标题、副标题、五位作者的顺序、页码 3269–3283，以及 2022-11-07 的纸质和在线出版日期；ACM 全文并非开放获取。arXiv v3（2022-10-11；v1 为 2022-08-16）是作者 18 页的扩展版，并注明 Wei Zhou 与 Lan Zhang 贡献相同；本条目中的数据取自该版本。MCUSec/SEmu 快照 6dc8be9（2025-04-22）声明规则提取器采用 Apache-2.0，基于 S2E 的规则诊断工具采用 S2E 2.0 的非商业 Cyberhaven Research License，模糊测试部分则指向采用 Apache-2.0 的 IoTS-P/SEmu-Fuzz；GitHub 对主仓库显示 NOASSERTION。仓库还转载了厂商参考手册 PDF，其使用条款另行适用，并引导用户从 Google Drive 获取 Stanford 词性标注器和句法分析器。构建规则诊断工具需按照 µEmu 的 S2E 2.0 软件包列表和 repo 清单进行，在四核机器上预计耗时 30–60 分钟。

## 一手来源

1. <https://dl.acm.org/doi/10.1145/3548606.3559386>
2. <https://api.crossref.org/works/10.1145/3548606.3559386>
3. <https://arxiv.org/abs/2208.07833>
4. <https://arxiv.org/pdf/2208.07833v3>
5. <https://github.com/MCUSec/SEmu/blob/6dc8be91f6809f34af972a93c9dd972f85145a00/README.md>
6. <https://github.com/MCUSec/SEmu/blob/6dc8be91f6809f34af972a93c9dd972f85145a00/LICENSE>
7. <https://github.com/MCUSec/SEmu/tree/6dc8be91f6809f34af972a93c9dd972f85145a00/Manual>

## 关于此条目

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
