QEMU for Rust, and Rust for QEMU!
This repository provides several QEMU-related crates:
- qemu: QEMU binary installer
- qemu-plugin-sys: Low level bindings to the QEMU plugin API
- qemu-plugin: High level bindings to the QEMU plugin API
The crates work together to enable building QEMU utilities in Rust and running QEMU from Rust code in a machine-specified way.
To see what the crate can do, trace the execution (including syscalls, memory accesses, and instructions) of a program like:
cargo run -r --bin tracer -- -a /bin/ls -- -lah
This repository also provides a crate (qemu
) which builds QEMU from source and
installs Rust wrappers for QEMU as binaries.
You can install QEMU with (add any additional features you need, e.g. plugins
):
cargo install qemu@9.0.0-v0 --features=binaries
On some systems, particularly BTRFS systems, /tmp
may not be large enough for the
temporary build directory (QEMU is quite large to build). In this case, create a
directory on your root filesystem (e.g. $HOME/.cargo/tmp
) and set
CARGO_TARGET_DIR=$HOME/.cargo/tmp
when running the install command.