5个不稳定版本
使用旧的Rust 2015
0.6.1 | 2018年2月14日 |
---|---|
0.6.0 | 2018年2月7日 |
0.5.1 | 2018年2月7日 |
0.5.0 | 2018年2月6日 |
0.4.0 | 2018年2月6日 |
#991 in 编程语言
14KB
198 行
machina
在运行时管理和执行汇编。
跨平台吗?
是的。
为什么?
模拟器、JIT、dynarec等。
安装
要构建测试,你需要sam。
在Cargo.toml
[dependencies]
machina = "*"
如果你要处理许多指令,你可能需要启用优化(仅应用于Cache
)
[dependencies.machina]
version = "*"
features = ["optimize"]
示例
extern crate machina;
#[macro_use]
extern crate sam; // just to keep it simple
use machina::cache::{Cache, STUB};
use machina::memory::Memory;
fn main() {
let asm = format!("mov rax, {}", STUB); // fill in a dummy address
let dummy = 64;
let address = &dummy as *const _; // address of dummy
let cache = Cache::new();
let memory = Memory::new(1); // 1 page = 1024 bytes
cache.insert("mov_rax_x".to_string(), sam!(x64 => &asm)); // create the bytes at compile time via sam
memory.emit_bytes(cache.get_stub("mov_rax_x".to_string(), address as u64)) // get "mov_rax_x" and fill in a dynamic address
let rax = memory.execute(); // returns rax
}
依赖项
~240–550KB