#unicorn #bindings #emulator #cpu #now

sys no-std libunicorn-sys

Rust 对 unicorn 模拟器的绑定

6 个版本 (重大更新)

0.9.1 2019年5月11日
0.9.0 2018年12月18日
0.8.0 2018年2月16日
0.7.0 2017年5月17日
0.4.0 2017年1月22日

#6 in #unicorn


unicorn 中使用

GPL-2.0 许可证

7.5MB
140K SLoC

C 129K SLoC // 0.1% comments Visual Studio Project 5.5K SLoC Python 5K SLoC // 0.1% comments Visual Studio Solution 370 SLoC Rust 340 SLoC // 0.0% comments Shell 146 SLoC // 0.1% comments Batch 62 SLoC // 0.1% comments C++ 16 SLoC

包含 (DOS 可执行文件, 415KB) build_tools/vswhere.exe

unicorn-rs

此软件包已过时,不再维护。

Rust 绑定现在包含在 unicorn 中,并将从现在开始在 unicorn 中维护。

https://github.com/unicorn-engine/unicorn/tree/next/bindings/rust

摘要

Cargo Documentation Build Status

Rust 对 unicorn CPU 模拟器的绑定。

use unicorn::{Cpu, CpuX86};

fn main() {
    let x86_code32: Vec<u8> = vec![0x41, 0x4a]; // INC ecx; DEC edx

    let emu = CpuX86::new(unicorn::Mode::MODE_32).expect("failed to instantiate emulator");
    let _ = emu.mem_map(0x1000, 0x4000, unicorn::Protection::ALL);
    let _ = emu.mem_write(0x1000, &x86_code32);
    let _ = emu.reg_write_i32(unicorn::RegisterX86::ECX, -10);
    let _ = emu.reg_write_i32(unicorn::RegisterX86::EDX, -50);

    let _ = emu.emu_start(0x1000, (0x1000 + x86_code32.len()) as u64, 10 * unicorn::SECOND_SCALE, 1000);
    assert_eq!(emu.reg_read_i32(unicorn::RegisterX86::ECX), Ok(-9));
    assert_eq!(emu.reg_read_i32(unicorn::RegisterX86::EDX), Ok(-51));
}

安装

此项目已在 Linux、OS X 和 Windows 上进行测试。绑定针对 unicorn 的 1.0 版本构建。

如果系统上尚未安装 unicorn,此软件包将尝试构建 unicorn。要在 Linux 和 OS X 上构建 unicorn,需要以下工具:gcc、make、git、python 2.7。Windows 上需要 Visual Studio。

要使用 unicorn-rs,只需将其添加到您的程序 Cargo.toml 的依赖项中。

[dependencies]
unicorn = "0.8.0"

变更日志

0.9

现在实现了 Error 特性(感谢 @tathanhdinh),支持了 RESOURCE 和 EXCEPTION 错误情况(感谢 @endeav0r)。现在可以保存和恢复 CPU 上下文(感谢 @oblivia-simplex)。您可以在 tests/unicorn.rs 中的测试 x86_context_save_and_restore 中找到示例用法。默认情况下,ffi 绑定 crate unicorn-sys 是 no_std(感谢 @strake)。最后,该 crate 已迁移到 Rust edition 2018。

再次感谢所有贡献者,您的帮助总是受到赞赏。

0.8.0

添加了对 mem_map_ptr 的支持。

0.7.0

现在支持 Windows(感谢 kichristensen)。

0.6.0

我们现在通过 pkg-tool 检查系统上是否已安装 unicorn,如果可用则使用该版本。否则,在构建软件包时编译 unicorn。

0.4.0

unicorn 现在作为 unicorn-rs 构建过程的组成部分进行编译。

0.3.0

回调的处理方式已更改,应使用闭包实现回调。请参阅测试用例以获取示例。

  • 添加了对中断、输入/输出和 sysenter 回调的支持

贡献

对这个项目的贡献非常受欢迎。拉取请求、错误报告、代码审查、测试、文档或对您使用绑定的反馈,没有什么是太小的事情。如果您有任何问题,请毫不犹豫地打开一个问题。

贡献者

  • Sébastien Duquette (@ekse)
  • Israel Hallé (@isra17) 为重新设计回调 API
  • Richo Healey (@richo)
  • Kim Christensen (@kichristensen) 为 Windows 支持
  • petevine 为审查项目并添加测试
  • jschievink 为其 API 设计的帮助
  • m4b 为 build.rs 脚本
  • TA Thanh Dinh
  • Lucca Fraser (@oblivia-simplex)
  • Matthew Farkas-Dyck (@strake)
  • endeav0r

依赖项