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
7.5MB
142K SLoC
unicorn-rs
寻找维护者:我在寻找新的项目维护者。如果您感兴趣,请提交一个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