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 中使用
7.5MB
140K SLoC
包含 (DOS 可执行文件, 415KB) build_tools/vswhere.exe
unicorn-rs
此软件包已过时,不再维护。
Rust 绑定现在包含在 unicorn 中,并将从现在开始在 unicorn 中维护。
https://github.com/unicorn-engine/unicorn/tree/next/bindings/rust
摘要
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