Unicorn:基于 QEMU 的多架构 CPU 模拟器框架安装与使用指南
Unicorn 是一个轻量级、跨平台、多架构的 CPU 模拟器框架,基于 QEMU 发展而来。它把 QEMU 的 CPU 仿真核心抽离成一套架构中立的 API,可被 C 及 Python、Rust、Go、Java、Ruby、C# 等众多语言绑定调用,广泛用于逆向工程、动态二进制分析、模糊测试、壳分析等场景。
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | https://github.com/unicorn-engine/unicorn |
| 官方网站 | http://www.unicorn-engine.org |
| 开源协议 | GPLv2(自由软件) |
| 主要语言 | C(约 86.8%) |
| Star 数 | 9.5k+ |
| 支持架构 | ARM、ARM64、M68K、MIPS、PowerPC、RISCV、SPARC、S390X、TriCore、X86(16/32/64 位) |
二、官方图片
Unicorn 官方 Logo:

三、环境要求
- 安装方式一(最简单):pip 安装 Python 绑定,需要 Python 3;
- 安装方式二(源码编译):CMake、pkg-config,以及 C 编译器;
- Windows 编译需 MSVC(Visual Studio >= 16.8);
- 支持 Windows、Linux、macOS、Android、*BSD、Solaris。
四、部署步骤
方式 A:pip 安装(推荐,最快上手)
pip install unicorn
安装后即可在 Python 里 import unicorn 使用。
方式 B:Linux/macOS 源码编译
按官方 docs/COMPILE.md:
# 安装 cmake 与 pkg-config(Ubuntu)
sudo apt install cmake pkg-config
# macOS
brew install cmake pkg-config
然后:
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
方式 C:Windows MSVC 编译
在 Visual Studio 命令行中:
mkdir build && cd build
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
nmake
也可用 cmake .. -G "Visual Studio 16 2019" -A "win32" -DCMAKE_BUILD_TYPE=Release 后用 msbuild 构建。
五、使用方法
Unicorn 的核心是把一段机器码映射到指定内存地址,再让 CPU 仿真执行。最小示例(Python 绑定):
from unicorn import *
from unicorn.x86_const import *
# 要仿真执行的机器码(x86 机器码)
CODE = b"\x90\x91" # 示例:nop; 操作
ADDRESS = 0x1000000
mu = Uc(UC_ARCH_X86, UC_MODE_32)
mu.mem_map(ADDRESS, 2 * 1024 * 1024)
mu.mem_write(ADDRESS, CODE)
# 开始仿真执行,直到结束
mu.emu_start(ADDRESS, ADDRESS + len(CODE))
print("仿真执行完成")
要点:
Uc(arch, mode)创建仿真实例,如UC_ARCH_X86 / UC_MODE_32;mem_map映射内存,mem_write写入代码;emu_start(begin, until)从指定地址开始执行到结束地址;- 可注册 hook(代码 hook、内存 hook、中断 hook)做指令级插桩,用于逆向分析时追踪寄存器/内存变化。
支持通过 hook 在每条指令执行时打印寄存器,是逆向分析、壳算法还原、Fuzz 种子构造的常用手段。
六、常见问题 FAQ
Q1:最快的上手方式?
直接 pip install unicorn,然后用 Python 绑定写最小仿真示例即可。
Q2:源码编译需要什么? CMake 与 pkg-config,外加 C 编译器;Windows 用 MSVC(VS >= 16.8)。
Q3:支持哪些 CPU 架构? ARM、ARM64、M68K、MIPS、PowerPC、RISCV、SPARC、S390X、TriCore 以及 X86(16/32/64 位)。
Q4:Unicorn 和 QEMU 是什么关系? Unicorn 基于 QEMU 的 CPU 仿真核心,抽离为轻量、架构中立、可嵌入的库,不模拟整机系统。
Q5:可以做指令级插桩吗? 可以。注册 code hook / mem hook / interrupt hook,即可在每条指令前后插入自定义逻辑,常用于逆向分析。
Q6:绑定了哪些语言? 除 C 外,官方列出 Crystal、Clojure、Perl、Rust、Ruby、Python、Java、.NET、Go、Delphi、Haskell、Lua、Zig 等绑定。
七、跳转链接
- GitHub 仓库:https://github.com/unicorn-engine/unicorn
- 官方网站:http://www.unicorn-engine.org
- 编译文档:https://github.com/unicorn-engine/unicorn/blob/dev/docs/COMPILE.md
- FAQ:https://github.com/unicorn-engine/unicorn/blob/dev/docs/FAQ.md