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

MIT许可证

90KB
2.5K SLoC

C 1.5K SLoC // 0.0% comments Rust 437 SLoC C++ 392 SLoC Prolog 18 SLoC Shell 13 SLoC

Linux vmread库的Rust绑定

Crates.io MIT licensed

API文档

主要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