#emulator #bindings #cpu

unicorn

Rust版本的Unicorn模拟器绑定

9个版本 (破坏性更新)

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.3.0 2016年7月24日

#179 in #cpu

GPL-2.0 许可证

7.5MB
142K SLoC

C 129K SLoC // 0.1% comments Visual Studio Project 5.5K SLoC Python 5K SLoC // 0.1% comments Rust 2K SLoC // 0.0% comments Visual Studio Solution 369 SLoC Shell 145 SLoC // 0.1% comments Batch 61 SLoC // 0.1% comments C++ 15 SLoC

unicorn-rs

Cargo Documentation Build Status

寻找维护者:我在寻找新的项目维护者。如果您感兴趣,请提交一个issue或通过电子邮件 [email protected] 联系我。

Unicorn CPU模拟器的Rust绑定。

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,此包将尝试构建它。要在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 trait(感谢 @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回调的支持

贡献

对该项目的贡献非常受欢迎。pull requests、错误报告、代码审查、测试、文档或对您使用绑定的反馈,任何东西都不算小。如果您有任何问题,请毫不犹豫地提交一个issue。

贡献者

  • 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

依赖项