unicorn简介:
Unicorn 是一个轻量级, 多平台, 多架构的 CPU 模拟器框架.
我们可以更好地关注 CPU 操作, 忽略机器设备的差异. 想象一下, 我们可以将其应用于这些情景:
比如我们单纯只是需要模拟代码的执行而非需要一个真的 CPU 去完成那些操作, 又或者想要更安全地
分析恶意代码, 检测病毒特征, 或者想要在逆向过程中验证某些代码的含义. 使用 CPU 模拟器可以很好
地帮助我们提供便捷.
它的亮点 (这也归功于 Unicorn 是基于 qemu 而开发的) 包括:
支持多种架构: Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64).
对 Windows 和 nix 系统 (已确认包含 Mac OSX, Linux, BSD & Solaris) 的原生支持
具有平台独立且简洁易于使用的 API
使用 JIT 编译技术, 性能表现优异
from unicorn import *
from unicorn.x86_const import *
X86_CODE32 = b"\x41\x4a"
Address = 0x1000000
mu = Uc(UC_ARCH_X86, UC_MODE_32)
mu.mem_map(Address, 2*1024*1024)
mu.mem_write(Address, X86_CODE32)
mu.reg_write(UC_X86_REG_ECX, 0X1234)
mu.reg_write(UC_X86_REG_EDX, 0X7890)
mu.emu_start(Address, Address+len(X86_CODE32))
r_ecx = mu.reg_read(UC_X86_REG_ECX)
r_edx = mu.reg_read(UC_X86_REG_EDX)
print(">> ecx = 0x%x" % r_ecx)
print(">> edx = 0x%x" % r_edx)