From bb2870e56d6c9a0a7b96be8287193a753e3a4391 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sun, 4 Jul 2021 15:21:01 -0700 Subject: add ffi wrappers for real mode, protected mode, and a multiarch build --- ffi/src/protected_mode.rs | 17 ++++++++++------- ffi/src/real_mode.rs | 17 ++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) (limited to 'ffi/src') diff --git a/ffi/src/protected_mode.rs b/ffi/src/protected_mode.rs index fc0c6a9..5c679e4 100644 --- a/ffi/src/protected_mode.rs +++ b/ffi/src/protected_mode.rs @@ -1,10 +1,11 @@ -use yaxpeax_arch::{Arch, Decoder, LengthedInstruction, AddressBase}; +use yaxpeax_arch::{Arch, Decoder, LengthedInstruction, U8Reader, AddressBase}; use yaxpeax_x86::protected_mode; #[no_mangle] -pub unsafe extern "C" fn yaxpeax_x86_32_decode_optimistic(data: *const u8, length: u64, inst: *mut protected_mode::Instruction) -> bool { +pub unsafe extern "C" fn yaxpeax_x86_32_decode(data: *const u8, length: u64, inst: *mut protected_mode::Instruction) -> bool { let inst: &mut protected_mode::Instruction = core::mem::transmute(inst); - ::Decoder::default().decode_into(inst, core::slice::from_raw_parts(data as *const u8, length as usize).iter().cloned()).is_err() + let mut reader = U8Reader::new(core::slice::from_raw_parts(data as *const u8, length as usize)); + ::Decoder::default().decode_into(inst, &mut reader).is_err() } #[no_mangle] @@ -13,15 +14,17 @@ pub unsafe extern "C" fn yaxpeax_x86_32_instr_length(inst: *mut protected_mode:: 0.wrapping_offset(inst.len()).to_linear() } -#[cfg(fmt)] +#[cfg(feature = "fmt")] mod write_sink; -#[cfg(fmt)] +#[cfg(feature = "fmt")] mod fmt { - use write_sink::InstructionSink; + use super::write_sink::InstructionSink; use core::fmt::Write; + use yaxpeax_x86::protected_mode; + #[no_mangle] pub unsafe extern "C" fn yaxpeax_x86_32_fmt(inst: *mut protected_mode::Instruction, text: *mut u8, len: usize) { let inst: &mut protected_mode::Instruction = core::mem::transmute(inst); @@ -31,5 +34,5 @@ mod fmt { } } -#[cfg(fmt)] +#[cfg(feature = "fmt")] pub use fmt::yaxpeax_x86_32_fmt; diff --git a/ffi/src/real_mode.rs b/ffi/src/real_mode.rs index 6a5f866..879bffa 100644 --- a/ffi/src/real_mode.rs +++ b/ffi/src/real_mode.rs @@ -1,10 +1,11 @@ -use yaxpeax_arch::{Arch, Decoder, LengthedInstruction, AddressBase}; +use yaxpeax_arch::{Arch, Decoder, LengthedInstruction, U8Reader, AddressBase}; use yaxpeax_x86::real_mode; #[no_mangle] -pub unsafe extern "C" fn yaxpeax_x86_16_decode_optimistic(data: *const u8, length: u64, inst: *mut real_mode::Instruction) -> bool { +pub unsafe extern "C" fn yaxpeax_x86_16_decode(data: *const u8, length: u64, inst: *mut real_mode::Instruction) -> bool { let inst: &mut real_mode::Instruction = core::mem::transmute(inst); - ::Decoder::default().decode_into(inst, core::slice::from_raw_parts(data as *const u8, length as usize).iter().cloned()).is_err() + let mut reader = U8Reader::new(core::slice::from_raw_parts(data as *const u8, length as usize)); + ::Decoder::default().decode_into(inst, &mut reader).is_err() } #[no_mangle] @@ -13,15 +14,17 @@ pub unsafe extern "C" fn yaxpeax_x86_16_instr_length(inst: *mut real_mode::Instr 0.wrapping_offset(inst.len()).to_linear() } -#[cfg(fmt)] +#[cfg(feature = "fmt")] mod write_sink; -#[cfg(fmt)] +#[cfg(feature = "fmt")] mod fmt { - use write_sink::InstructionSink; + use super::write_sink::InstructionSink; use core::fmt::Write; + use yaxpeax_x86::real_mode; + #[no_mangle] pub unsafe extern "C" fn yaxpeax_x86_16_fmt(inst: *mut real_mode::Instruction, text: *mut u8, len: usize) { let inst: &mut real_mode::Instruction = core::mem::transmute(inst); @@ -31,5 +34,5 @@ mod fmt { } } -#[cfg(fmt)] +#[cfg(feature = "fmt")] pub use fmt::yaxpeax_x86_16_fmt; -- cgit v1.1