runs_inside_qemu

Crates.ioruns_inside_qemu
lib.rsruns_inside_qemu
version1.2.1
sourcesrc
created_at2021-07-06 13:02:20.227632
updated_at2021-11-10 12:16:23.545786
descriptionSmall no_std-lib that checks if the binary is running inside a QEMU virtual machine. Only works on x86/x86_64 platforms.
homepagehttps://github.com/phip1611/runs_inside_qemu
repositoryhttps://github.com/phip1611/runs_inside_qemu
max_upload_size
id419441
size17,816
Philipp Schuster (phip1611)

documentation

https://docs.rs/runs_inside_qemu

README

Rust lib runs_inside_qemu

runs_inside_qemu is a small no_std-lib that checks if the binary is running inside a QEMU virtual machine. It doesn't need heap allocations and only works on x86/x86_64 platform.

Under the hood, this is a wrapper around the awesome crate https://crates.io/crates/raw-cpuid.

This crate was build/tested with rustc 1.55.0-nightly. It won't work on stable as long as inline assembly is not part of stable rust.

Example Code

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');
        }
    }
}

Limitations

This doesn't work if you pass -cpu host to QEMU, because in this case the CPU brand string is not "QEMU Virtual CPU version 2.5+".

Rust version / MSRV

This crate needs the nightly toolchain. With Rust 1.56.1 stable, it doesn't build.

Commit count: 18

cargo fmt