4个版本
0.1.5 | 2020年4月27日 |
---|---|
0.1.4 | 2020年4月12日 |
0.1.2 | 2020年4月1日 |
0.1.1 | 2020年3月30日 |
#927 in Unix API
90KB
2.5K SLoC
Linux vmread库的Rust绑定
主要crate
- vmread: 安全的高级API
- vmread-sys: 不安全生成的低级API
示例
使用以下命令构建示例
cargo build --examples <--features kmod_rw>
请确保以root用户运行,它们将被放置在target/(debug|release)/examples/目录中
更多信息
- 如果使用kmod_rw功能,所需的内核模块将在target vmread-sys目录内构建
- 有关更多信息,请访问vmread仓库
lib.rs
:
一个用于在基于KVM的虚拟机上读取和写入Windows内存的库
特性标志
vmread使用一组特性标志来在不同的操作模式之间切换。这是为了在特定情况下实现最佳性能。目前有3种可用的模式
default
:使用系统调用执行内存读写操作。这是最安全的选项,尽管速度较慢。internal_rw
:直接访问内存。这适用于加载到KVM进程(通常是qemu-system-x86_64)的共享库。这是最不安全的选项,并且在各种系统安装中难以实现一致。kmod_rw
:借助内核模块,我们能够将KVM地址空间映射到我们的当前地址空间并直接访问它。这是默认和内部模式之间的一种很好的结合,如果运行自定义内核模块是可行的,那么这是最佳选择。
示例
一个简单的进程列表
extern crate vmread;
fn main() {
let ctx_ret = vmread::create_context(0);
if ctx_ret.is_ok() {
let (mut ctx, _) = ctx_ret.unwrap();
println!("VMRead initialized!");
println!("Process List:\nPID\tVIRT\t\t\tPHYS\t\tBASE\t\tNAME");
for i in &(ctx.refresh_processes().process_list) {
println!("{:#4x}\t{:#16x}\t{:#9x}\t{:#9x}\t{}", i.proc.pid, i.proc.process, i.proc.physProcess, i.proc.dirBase, i.name);
}
} else {
let (eval, estr) = ctx_ret.err().unwrap();
println!("Initialization error {}: {}", eval, estr);
}
}
依赖关系
~0–2MB
~40K SLoC