#qemu #check #virtual-machine #platform #running #binary #x86

无std runs_inside_qemu

一个小型无std库,用于检查二进制文件是否在QEMU虚拟机中运行。仅适用于x86/x86_64平台

8个稳定版本

1.2.1 2021年11月10日
1.1.0 2021年10月14日
1.0.4 2021年8月11日
1.0.2 2021年7月7日

#188无标准库

MIT 许可证

10KB
80

Rust库 runs_inside_qemu

runs_inside_qemu 是一个小的 no_std-库,用于检查二进制文件是否在QEMU虚拟机中运行。它不需要堆分配,并且仅适用于 x86/x86_64 平台。

在底层,这是一个围绕优秀的crate https://crates.io/crates/raw-cpuid 的包装器。

此crate是用 rustc 1.55.0-nightly 构建/测试的。只要内联汇编不是稳定Rust的一部分,它就不会在稳定版本上工作。

示例代码

use runs_inside_qemu::runs_inside_qemu;

fn main() {
    // If we are in QEMU, we use the nice "debugcon"-feature which maps
    // the x86 I/O-port `0xe9` to stdout or a file.
    if runs_inside_qemu() {
        unsafe {
            x86::io::outb(0xe9, b'H');
            x86::io::outb(0xe9, b'e');
            x86::io::outb(0xe9, b'l');
            x86::io::outb(0xe9, b'l');
            x86::io::outb(0xe9, b'o');
            x86::io::outb(0xe9, b'\n');
        }
    }
}

局限性

如果你将 -cpu host 传递给QEMU,则此功能将不起作用,因为在这种情况下CPU品牌字符串不是 "QEMU Virtual CPU version 2.5+"。

Rust版本 / MSRV

此crate需要nightly工具链。使用Rust 1.56.1稳定版本时,无法构建。

依赖项

~690KB
~13K SLoC