Loading...

文章背景图

Unicorn:基于 QEMU 的多架构 CPU 模拟器框架安装与使用指南

2026-10-27
0
- 字
- 分钟
|

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:

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
评论交流

文章目录