parent
359e94ec97
commit
2302f1b35c
@ -94,6 +94,7 @@ pyo3 = { version = "0.18", optional = true }
|
|||||||
document-features = { version = "0.2", optional = true }
|
document-features = { version = "0.2", optional = true }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
libafl_qemu_build = { path = "./libafl_qemu_build", version = "0.12.0" }
|
||||||
pyo3-build-config = { version = "0.18", optional = true }
|
pyo3-build-config = { version = "0.18", optional = true }
|
||||||
rustversion = "1.0"
|
rustversion = "1.0"
|
||||||
bindgen = "0.69"
|
bindgen = "0.69"
|
||||||
|
@ -14,21 +14,35 @@ pub fn build() {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let src_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||||
|
let src_dir = PathBuf::from(src_dir);
|
||||||
|
|
||||||
|
let out_dir = env::var("OUT_DIR").unwrap();
|
||||||
|
let out_dir = PathBuf::from(&out_dir);
|
||||||
|
|
||||||
|
let mut target_dir = out_dir.clone();
|
||||||
|
target_dir.pop();
|
||||||
|
target_dir.pop();
|
||||||
|
target_dir.pop();
|
||||||
|
let include_dir = target_dir.join("include");
|
||||||
|
|
||||||
let qemu_asan_guest = cfg!(all(feature = "build_libgasan", not(feature = "hexagon")));
|
let qemu_asan_guest = cfg!(all(feature = "build_libgasan", not(feature = "hexagon")));
|
||||||
let qemu_asan = cfg!(all(feature = "build_libqasan", not(feature = "hexagon")));
|
let qemu_asan = cfg!(all(feature = "build_libqasan", not(feature = "hexagon")));
|
||||||
|
|
||||||
let libafl_qemu_hdr_name = "libafl_qemu.h";
|
let libafl_qemu_hdr_name = "libafl_qemu.h";
|
||||||
|
|
||||||
let exit_hdr_dir = PathBuf::from("runtime");
|
let libafl_runtime_dir = src_dir.join("runtime");
|
||||||
let libafl_qemu_hdr = exit_hdr_dir.join(libafl_qemu_hdr_name);
|
let libafl_qemu_hdr = libafl_runtime_dir.join(libafl_qemu_hdr_name);
|
||||||
|
|
||||||
|
let runtime_bindings_file = out_dir.join("libafl_qemu_bindings.rs");
|
||||||
|
let stub_runtime_bindings_file = src_dir.join("runtime/libafl_qemu_stub_bindings.rs");
|
||||||
|
|
||||||
println!("cargo:rustc-cfg=emulation_mode=\"{emulation_mode}\"");
|
println!("cargo:rustc-cfg=emulation_mode=\"{emulation_mode}\"");
|
||||||
println!("cargo:rerun-if-env-changed=EMULATION_MODE");
|
println!("cargo:rerun-if-env-changed=EMULATION_MODE");
|
||||||
|
|
||||||
println!("cargo:rerun-if-changed=build.rs");
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
println!("cargo:rerun-if-changed=build_linux.rs");
|
println!("cargo:rerun-if-changed=build_linux.rs");
|
||||||
println!("cargo:rerun-if-changed={}", exit_hdr_dir.display());
|
println!("cargo:rerun-if-changed={}", libafl_runtime_dir.display());
|
||||||
|
|
||||||
let cpu_target = if cfg!(feature = "x86_64") {
|
let cpu_target = if cfg!(feature = "x86_64") {
|
||||||
"x86_64".to_string()
|
"x86_64".to_string()
|
||||||
@ -65,24 +79,15 @@ pub fn build() {
|
|||||||
String::new()
|
String::new()
|
||||||
};
|
};
|
||||||
|
|
||||||
if std::env::var("DOCS_RS").is_ok() {
|
if env::var("DOCS_RS").is_ok() || cfg!(feature = "clippy") {
|
||||||
|
fs::copy(&stub_runtime_bindings_file, &runtime_bindings_file).expect("Could not copy stub bindings file");
|
||||||
return; // only build when we're not generating docs
|
return; // only build when we're not generating docs
|
||||||
}
|
}
|
||||||
|
|
||||||
let out_dir = env::var("OUT_DIR").unwrap();
|
|
||||||
let out_dir_path = Path::new(&out_dir);
|
|
||||||
let out_dir_path_buf = out_dir_path.to_path_buf();
|
|
||||||
let mut target_dir = out_dir_path_buf.clone();
|
|
||||||
target_dir.pop();
|
|
||||||
target_dir.pop();
|
|
||||||
target_dir.pop();
|
|
||||||
let include_dir = target_dir.join("include");
|
|
||||||
|
|
||||||
fs::create_dir_all(&include_dir).expect("Could not create include dir");
|
fs::create_dir_all(&include_dir).expect("Could not create include dir");
|
||||||
|
|
||||||
fs::copy(libafl_qemu_hdr.clone(), include_dir.join(libafl_qemu_hdr_name)).expect("Could not copy libafl_qemu.h to out directory.");
|
fs::copy(libafl_qemu_hdr.clone(), include_dir.join(libafl_qemu_hdr_name)).expect("Could not copy libafl_qemu.h to out directory.");
|
||||||
|
|
||||||
let binding_file = out_dir_path_buf.join("backdoor_bindings.rs");
|
|
||||||
bindgen::Builder::default()
|
bindgen::Builder::default()
|
||||||
.derive_debug(true)
|
.derive_debug(true)
|
||||||
.derive_default(true)
|
.derive_default(true)
|
||||||
@ -95,9 +100,11 @@ pub fn build() {
|
|||||||
.header(libafl_qemu_hdr.display().to_string())
|
.header(libafl_qemu_hdr.display().to_string())
|
||||||
.generate()
|
.generate()
|
||||||
.expect("Exit bindings generation failed.")
|
.expect("Exit bindings generation failed.")
|
||||||
.write_to_file(binding_file)
|
.write_to_file(&runtime_bindings_file)
|
||||||
.expect("Could not write bindings.");
|
.expect("Could not write bindings.");
|
||||||
|
|
||||||
|
libafl_qemu_build::store_generated_content_if_different(&stub_runtime_bindings_file, fs::read(&runtime_bindings_file).expect("Could not read generated bindings file").as_slice());
|
||||||
|
|
||||||
if (emulation_mode == "usermode") && (qemu_asan || qemu_asan_guest) {
|
if (emulation_mode == "usermode") && (qemu_asan || qemu_asan_guest) {
|
||||||
let qasan_dir = Path::new("libqasan");
|
let qasan_dir = Path::new("libqasan");
|
||||||
let qasan_dir = fs::canonicalize(qasan_dir).unwrap();
|
let qasan_dir = fs::canonicalize(qasan_dir).unwrap();
|
||||||
@ -108,7 +115,7 @@ pub fn build() {
|
|||||||
make.env("CFLAGS", "-DDEBUG=1");
|
make.env("CFLAGS", "-DDEBUG=1");
|
||||||
}
|
}
|
||||||
assert!(make
|
assert!(make
|
||||||
.current_dir(out_dir_path)
|
.current_dir(&out_dir)
|
||||||
.env("CC", &cross_cc)
|
.env("CC", &cross_cc)
|
||||||
.env("OUT_DIR", &target_dir)
|
.env("OUT_DIR", &target_dir)
|
||||||
.arg("-C")
|
.arg("-C")
|
||||||
|
@ -2340,7 +2340,6 @@ pub type DeviceReset = ::std::option::Option<unsafe extern "C" fn(dev: *mut Devi
|
|||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
pub struct DeviceClass {
|
pub struct DeviceClass {
|
||||||
pub parent_class: ObjectClass,
|
pub parent_class: ObjectClass,
|
||||||
#[doc = " @categories: device categories device belongs to"]
|
|
||||||
pub categories: [::std::os::raw::c_ulong; 1usize],
|
pub categories: [::std::os::raw::c_ulong; 1usize],
|
||||||
#[doc = " @fw_name: name used to identify device to firmware interfaces"]
|
#[doc = " @fw_name: name used to identify device to firmware interfaces"]
|
||||||
pub fw_name: *const ::std::os::raw::c_char,
|
pub fw_name: *const ::std::os::raw::c_char,
|
||||||
|
316
libafl_qemu/runtime/libafl_qemu_stub_bindings.rs
Normal file
316
libafl_qemu/runtime/libafl_qemu_stub_bindings.rs
Normal file
@ -0,0 +1,316 @@
|
|||||||
|
/* automatically generated by rust-bindgen 0.69.4 */
|
||||||
|
|
||||||
|
pub const _STDINT_H: u32 = 1;
|
||||||
|
pub const _FEATURES_H: u32 = 1;
|
||||||
|
pub const _DEFAULT_SOURCE: u32 = 1;
|
||||||
|
pub const __GLIBC_USE_ISOC2X: u32 = 0;
|
||||||
|
pub const __USE_ISOC11: u32 = 1;
|
||||||
|
pub const __USE_ISOC99: u32 = 1;
|
||||||
|
pub const __USE_ISOC95: u32 = 1;
|
||||||
|
pub const __USE_POSIX_IMPLICITLY: u32 = 1;
|
||||||
|
pub const _POSIX_SOURCE: u32 = 1;
|
||||||
|
pub const _POSIX_C_SOURCE: u32 = 200809;
|
||||||
|
pub const __USE_POSIX: u32 = 1;
|
||||||
|
pub const __USE_POSIX2: u32 = 1;
|
||||||
|
pub const __USE_POSIX199309: u32 = 1;
|
||||||
|
pub const __USE_POSIX199506: u32 = 1;
|
||||||
|
pub const __USE_XOPEN2K: u32 = 1;
|
||||||
|
pub const __USE_XOPEN2K8: u32 = 1;
|
||||||
|
pub const _ATFILE_SOURCE: u32 = 1;
|
||||||
|
pub const __WORDSIZE: u32 = 64;
|
||||||
|
pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
|
||||||
|
pub const __SYSCALL_WORDSIZE: u32 = 64;
|
||||||
|
pub const __TIMESIZE: u32 = 64;
|
||||||
|
pub const __USE_MISC: u32 = 1;
|
||||||
|
pub const __USE_ATFILE: u32 = 1;
|
||||||
|
pub const __USE_FORTIFY_LEVEL: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_C2X_STRTOL: u32 = 0;
|
||||||
|
pub const _STDC_PREDEF_H: u32 = 1;
|
||||||
|
pub const __STDC_IEC_559__: u32 = 1;
|
||||||
|
pub const __STDC_IEC_60559_BFP__: u32 = 201404;
|
||||||
|
pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
|
||||||
|
pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404;
|
||||||
|
pub const __STDC_ISO_10646__: u32 = 201706;
|
||||||
|
pub const __GNU_LIBRARY__: u32 = 6;
|
||||||
|
pub const __GLIBC__: u32 = 2;
|
||||||
|
pub const __GLIBC_MINOR__: u32 = 39;
|
||||||
|
pub const _SYS_CDEFS_H: u32 = 1;
|
||||||
|
pub const __glibc_c99_flexarr_available: u32 = 1;
|
||||||
|
pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0;
|
||||||
|
pub const __HAVE_GENERIC_SELECTION: u32 = 1;
|
||||||
|
pub const __GLIBC_USE_LIB_EXT2: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_IEC_60559_BFP_EXT_C2X: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X: u32 = 0;
|
||||||
|
pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0;
|
||||||
|
pub const _BITS_TYPES_H: u32 = 1;
|
||||||
|
pub const _BITS_TYPESIZES_H: u32 = 1;
|
||||||
|
pub const __OFF_T_MATCHES_OFF64_T: u32 = 1;
|
||||||
|
pub const __INO_T_MATCHES_INO64_T: u32 = 1;
|
||||||
|
pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1;
|
||||||
|
pub const __STATFS_MATCHES_STATFS64: u32 = 1;
|
||||||
|
pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1;
|
||||||
|
pub const __FD_SETSIZE: u32 = 1024;
|
||||||
|
pub const _BITS_TIME64_H: u32 = 1;
|
||||||
|
pub const _BITS_WCHAR_H: u32 = 1;
|
||||||
|
pub const _BITS_STDINT_INTN_H: u32 = 1;
|
||||||
|
pub const _BITS_STDINT_UINTN_H: u32 = 1;
|
||||||
|
pub const _BITS_STDINT_LEAST_H: u32 = 1;
|
||||||
|
pub const INT8_MIN: i32 = -128;
|
||||||
|
pub const INT16_MIN: i32 = -32768;
|
||||||
|
pub const INT32_MIN: i32 = -2147483648;
|
||||||
|
pub const INT8_MAX: u32 = 127;
|
||||||
|
pub const INT16_MAX: u32 = 32767;
|
||||||
|
pub const INT32_MAX: u32 = 2147483647;
|
||||||
|
pub const UINT8_MAX: u32 = 255;
|
||||||
|
pub const UINT16_MAX: u32 = 65535;
|
||||||
|
pub const UINT32_MAX: u32 = 4294967295;
|
||||||
|
pub const INT_LEAST8_MIN: i32 = -128;
|
||||||
|
pub const INT_LEAST16_MIN: i32 = -32768;
|
||||||
|
pub const INT_LEAST32_MIN: i32 = -2147483648;
|
||||||
|
pub const INT_LEAST8_MAX: u32 = 127;
|
||||||
|
pub const INT_LEAST16_MAX: u32 = 32767;
|
||||||
|
pub const INT_LEAST32_MAX: u32 = 2147483647;
|
||||||
|
pub const UINT_LEAST8_MAX: u32 = 255;
|
||||||
|
pub const UINT_LEAST16_MAX: u32 = 65535;
|
||||||
|
pub const UINT_LEAST32_MAX: u32 = 4294967295;
|
||||||
|
pub const INT_FAST8_MIN: i32 = -128;
|
||||||
|
pub const INT_FAST16_MIN: i64 = -9223372036854775808;
|
||||||
|
pub const INT_FAST32_MIN: i64 = -9223372036854775808;
|
||||||
|
pub const INT_FAST8_MAX: u32 = 127;
|
||||||
|
pub const INT_FAST16_MAX: u64 = 9223372036854775807;
|
||||||
|
pub const INT_FAST32_MAX: u64 = 9223372036854775807;
|
||||||
|
pub const UINT_FAST8_MAX: u32 = 255;
|
||||||
|
pub const UINT_FAST16_MAX: i32 = -1;
|
||||||
|
pub const UINT_FAST32_MAX: i32 = -1;
|
||||||
|
pub const INTPTR_MIN: i64 = -9223372036854775808;
|
||||||
|
pub const INTPTR_MAX: u64 = 9223372036854775807;
|
||||||
|
pub const UINTPTR_MAX: i32 = -1;
|
||||||
|
pub const PTRDIFF_MIN: i64 = -9223372036854775808;
|
||||||
|
pub const PTRDIFF_MAX: u64 = 9223372036854775807;
|
||||||
|
pub const SIG_ATOMIC_MIN: i32 = -2147483648;
|
||||||
|
pub const SIG_ATOMIC_MAX: u32 = 2147483647;
|
||||||
|
pub const SIZE_MAX: i32 = -1;
|
||||||
|
pub const WINT_MIN: u32 = 0;
|
||||||
|
pub const WINT_MAX: u32 = 4294967295;
|
||||||
|
pub const LIBAFL_SYNC_EXIT_OPCODE: u32 = 1727150607;
|
||||||
|
pub const LIBAFL_BACKDOOR_OPCODE: u32 = 1156725263;
|
||||||
|
pub const LIBAFL_QEMU_HDR_VERSION_NUMBER: u32 = 73;
|
||||||
|
pub type __u_char = ::std::os::raw::c_uchar;
|
||||||
|
pub type __u_short = ::std::os::raw::c_ushort;
|
||||||
|
pub type __u_int = ::std::os::raw::c_uint;
|
||||||
|
pub type __u_long = ::std::os::raw::c_ulong;
|
||||||
|
pub type __int8_t = ::std::os::raw::c_schar;
|
||||||
|
pub type __uint8_t = ::std::os::raw::c_uchar;
|
||||||
|
pub type __int16_t = ::std::os::raw::c_short;
|
||||||
|
pub type __uint16_t = ::std::os::raw::c_ushort;
|
||||||
|
pub type __int32_t = ::std::os::raw::c_int;
|
||||||
|
pub type __uint32_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __int64_t = ::std::os::raw::c_long;
|
||||||
|
pub type __uint64_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __int_least8_t = __int8_t;
|
||||||
|
pub type __uint_least8_t = __uint8_t;
|
||||||
|
pub type __int_least16_t = __int16_t;
|
||||||
|
pub type __uint_least16_t = __uint16_t;
|
||||||
|
pub type __int_least32_t = __int32_t;
|
||||||
|
pub type __uint_least32_t = __uint32_t;
|
||||||
|
pub type __int_least64_t = __int64_t;
|
||||||
|
pub type __uint_least64_t = __uint64_t;
|
||||||
|
pub type __quad_t = ::std::os::raw::c_long;
|
||||||
|
pub type __u_quad_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __intmax_t = ::std::os::raw::c_long;
|
||||||
|
pub type __uintmax_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __dev_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __uid_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __gid_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __ino_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __ino64_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __mode_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __nlink_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __off_t = ::std::os::raw::c_long;
|
||||||
|
pub type __off64_t = ::std::os::raw::c_long;
|
||||||
|
pub type __pid_t = ::std::os::raw::c_int;
|
||||||
|
#[repr(C)]
|
||||||
|
#[derive(Debug, Default, Copy, Clone)]
|
||||||
|
pub struct __fsid_t {
|
||||||
|
pub __val: [::std::os::raw::c_int; 2usize],
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn bindgen_test_layout___fsid_t() {
|
||||||
|
const UNINIT: ::std::mem::MaybeUninit<__fsid_t> = ::std::mem::MaybeUninit::uninit();
|
||||||
|
let ptr = UNINIT.as_ptr();
|
||||||
|
assert_eq!(
|
||||||
|
::std::mem::size_of::<__fsid_t>(),
|
||||||
|
8usize,
|
||||||
|
concat!("Size of: ", stringify!(__fsid_t))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
::std::mem::align_of::<__fsid_t>(),
|
||||||
|
4usize,
|
||||||
|
concat!("Alignment of ", stringify!(__fsid_t))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
unsafe { ::std::ptr::addr_of!((*ptr).__val) as usize - ptr as usize },
|
||||||
|
0usize,
|
||||||
|
concat!(
|
||||||
|
"Offset of field: ",
|
||||||
|
stringify!(__fsid_t),
|
||||||
|
"::",
|
||||||
|
stringify!(__val)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
pub type __clock_t = ::std::os::raw::c_long;
|
||||||
|
pub type __rlim_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __rlim64_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __id_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __time_t = ::std::os::raw::c_long;
|
||||||
|
pub type __useconds_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __suseconds_t = ::std::os::raw::c_long;
|
||||||
|
pub type __suseconds64_t = ::std::os::raw::c_long;
|
||||||
|
pub type __daddr_t = ::std::os::raw::c_int;
|
||||||
|
pub type __key_t = ::std::os::raw::c_int;
|
||||||
|
pub type __clockid_t = ::std::os::raw::c_int;
|
||||||
|
pub type __timer_t = *mut ::std::os::raw::c_void;
|
||||||
|
pub type __blksize_t = ::std::os::raw::c_long;
|
||||||
|
pub type __blkcnt_t = ::std::os::raw::c_long;
|
||||||
|
pub type __blkcnt64_t = ::std::os::raw::c_long;
|
||||||
|
pub type __fsblkcnt_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __fsblkcnt64_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __fsfilcnt_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __fsfilcnt64_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __fsword_t = ::std::os::raw::c_long;
|
||||||
|
pub type __ssize_t = ::std::os::raw::c_long;
|
||||||
|
pub type __syscall_slong_t = ::std::os::raw::c_long;
|
||||||
|
pub type __syscall_ulong_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type __loff_t = __off64_t;
|
||||||
|
pub type __caddr_t = *mut ::std::os::raw::c_char;
|
||||||
|
pub type __intptr_t = ::std::os::raw::c_long;
|
||||||
|
pub type __socklen_t = ::std::os::raw::c_uint;
|
||||||
|
pub type __sig_atomic_t = ::std::os::raw::c_int;
|
||||||
|
pub type int_least8_t = __int_least8_t;
|
||||||
|
pub type int_least16_t = __int_least16_t;
|
||||||
|
pub type int_least32_t = __int_least32_t;
|
||||||
|
pub type int_least64_t = __int_least64_t;
|
||||||
|
pub type uint_least8_t = __uint_least8_t;
|
||||||
|
pub type uint_least16_t = __uint_least16_t;
|
||||||
|
pub type uint_least32_t = __uint_least32_t;
|
||||||
|
pub type uint_least64_t = __uint_least64_t;
|
||||||
|
pub type int_fast8_t = ::std::os::raw::c_schar;
|
||||||
|
pub type int_fast16_t = ::std::os::raw::c_long;
|
||||||
|
pub type int_fast32_t = ::std::os::raw::c_long;
|
||||||
|
pub type int_fast64_t = ::std::os::raw::c_long;
|
||||||
|
pub type uint_fast8_t = ::std::os::raw::c_uchar;
|
||||||
|
pub type uint_fast16_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type uint_fast32_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type uint_fast64_t = ::std::os::raw::c_ulong;
|
||||||
|
pub type intmax_t = __intmax_t;
|
||||||
|
pub type uintmax_t = __uintmax_t;
|
||||||
|
pub type libafl_word = u64;
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_START_VIRT: LibaflQemuCommand =
|
||||||
|
LibaflQemuCommand(0);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_START_PHYS: LibaflQemuCommand =
|
||||||
|
LibaflQemuCommand(1);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_INPUT_VIRT: LibaflQemuCommand =
|
||||||
|
LibaflQemuCommand(2);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_INPUT_PHYS: LibaflQemuCommand =
|
||||||
|
LibaflQemuCommand(3);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_END: LibaflQemuCommand = LibaflQemuCommand(4);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_SAVE: LibaflQemuCommand = LibaflQemuCommand(5);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_LOAD: LibaflQemuCommand = LibaflQemuCommand(6);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_VERSION: LibaflQemuCommand = LibaflQemuCommand(7);
|
||||||
|
pub const LibaflQemuCommand_LIBAFL_QEMU_COMMAND_VADDR_FILTER_ALLOW: LibaflQemuCommand =
|
||||||
|
LibaflQemuCommand(8);
|
||||||
|
impl ::std::ops::BitOr<LibaflQemuCommand> for LibaflQemuCommand {
|
||||||
|
type Output = Self;
|
||||||
|
#[inline]
|
||||||
|
fn bitor(self, other: Self) -> Self {
|
||||||
|
LibaflQemuCommand(self.0 | other.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::ops::BitOrAssign for LibaflQemuCommand {
|
||||||
|
#[inline]
|
||||||
|
fn bitor_assign(&mut self, rhs: LibaflQemuCommand) {
|
||||||
|
self.0 |= rhs.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::ops::BitAnd<LibaflQemuCommand> for LibaflQemuCommand {
|
||||||
|
type Output = Self;
|
||||||
|
#[inline]
|
||||||
|
fn bitand(self, other: Self) -> Self {
|
||||||
|
LibaflQemuCommand(self.0 & other.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::ops::BitAndAssign for LibaflQemuCommand {
|
||||||
|
#[inline]
|
||||||
|
fn bitand_assign(&mut self, rhs: LibaflQemuCommand) {
|
||||||
|
self.0 &= rhs.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||||
|
pub struct LibaflQemuCommand(pub ::std::os::raw::c_uint);
|
||||||
|
pub use self::LibaflQemuCommand as LibaflExit;
|
||||||
|
pub const LibaflQemuEndStatus_LIBAFL_QEMU_END_UNKNOWN: LibaflQemuEndStatus = LibaflQemuEndStatus(0);
|
||||||
|
pub const LibaflQemuEndStatus_LIBAFL_QEMU_END_OK: LibaflQemuEndStatus = LibaflQemuEndStatus(1);
|
||||||
|
pub const LibaflQemuEndStatus_LIBAFL_QEMU_END_CRASH: LibaflQemuEndStatus = LibaflQemuEndStatus(2);
|
||||||
|
impl ::std::ops::BitOr<LibaflQemuEndStatus> for LibaflQemuEndStatus {
|
||||||
|
type Output = Self;
|
||||||
|
#[inline]
|
||||||
|
fn bitor(self, other: Self) -> Self {
|
||||||
|
LibaflQemuEndStatus(self.0 | other.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::ops::BitOrAssign for LibaflQemuEndStatus {
|
||||||
|
#[inline]
|
||||||
|
fn bitor_assign(&mut self, rhs: LibaflQemuEndStatus) {
|
||||||
|
self.0 |= rhs.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::ops::BitAnd<LibaflQemuEndStatus> for LibaflQemuEndStatus {
|
||||||
|
type Output = Self;
|
||||||
|
#[inline]
|
||||||
|
fn bitand(self, other: Self) -> Self {
|
||||||
|
LibaflQemuEndStatus(self.0 & other.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::ops::BitAndAssign for LibaflQemuEndStatus {
|
||||||
|
#[inline]
|
||||||
|
fn bitand_assign(&mut self, rhs: LibaflQemuEndStatus) {
|
||||||
|
self.0 &= rhs.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||||
|
pub struct LibaflQemuEndStatus(pub ::std::os::raw::c_uint);
|
||||||
|
pub use self::LibaflQemuEndStatus as LibaflExitEndParams;
|
||||||
|
extern "C" {
|
||||||
|
pub fn _libafl_sync_exit_call0(action: libafl_word) -> libafl_word;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn _libafl_sync_exit_call1(action: libafl_word, arg1: libafl_word) -> libafl_word;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn _libafl_sync_exit_call2(
|
||||||
|
action: libafl_word,
|
||||||
|
arg1: libafl_word,
|
||||||
|
arg2: libafl_word,
|
||||||
|
) -> libafl_word;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn _libafl_backdoor_call0(action: libafl_word) -> libafl_word;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn _libafl_backdoor_call1(action: libafl_word, arg1: libafl_word) -> libafl_word;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn _libafl_backdoor_call2(
|
||||||
|
action: libafl_word,
|
||||||
|
arg1: libafl_word,
|
||||||
|
arg2: libafl_word,
|
||||||
|
) -> libafl_word;
|
||||||
|
}
|
@ -34,7 +34,7 @@ mod bindings {
|
|||||||
#![allow(clippy::all)]
|
#![allow(clippy::all)]
|
||||||
#![allow(clippy::pedantic)]
|
#![allow(clippy::pedantic)]
|
||||||
|
|
||||||
include!(concat!(env!("OUT_DIR"), "/backdoor_bindings.rs"));
|
include!(concat!(env!("OUT_DIR"), "/libafl_qemu_bindings.rs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, TryFromPrimitive)]
|
#[derive(Debug, Clone, TryFromPrimitive)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user