diff options
Diffstat (limited to 'ffi/src')
-rw-r--r-- | ffi/src/protected_mode.rs | 17 | ||||
-rw-r--r-- | ffi/src/real_mode.rs | 17 |
2 files changed, 20 insertions, 14 deletions
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); - <protected_mode::Arch as Arch>::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)); + <protected_mode::Arch as Arch>::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); - <real_mode::Arch as Arch>::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)); + <real_mode::Arch as Arch>::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; |