rust: return u32 from insn_in_hook callback
This commit is contained in:
parent
966798fbf6
commit
9702e657a2
@ -181,7 +181,7 @@ pub extern "C" fn insn_in_hook_proxy<D, F>(
|
|||||||
size: usize,
|
size: usize,
|
||||||
user_data: *mut UcHook<D, F>,
|
user_data: *mut UcHook<D, F>,
|
||||||
) where
|
) where
|
||||||
F: FnMut(&mut crate::Unicorn<D>, u32, usize),
|
F: FnMut(&mut crate::Unicorn<D>, u32, usize) -> u32,
|
||||||
{
|
{
|
||||||
let user_data = unsafe { &mut *user_data };
|
let user_data = unsafe { &mut *user_data };
|
||||||
debug_assert_eq!(uc, user_data.uc.get_handle());
|
debug_assert_eq!(uc, user_data.uc.get_handle());
|
||||||
|
@ -758,7 +758,7 @@ impl<'a, D> Unicorn<'a, D> {
|
|||||||
/// Add hook for x86 IN instruction.
|
/// Add hook for x86 IN instruction.
|
||||||
pub fn add_insn_in_hook<F: 'a>(&mut self, callback: F) -> Result<ffi::uc_hook, uc_error>
|
pub fn add_insn_in_hook<F: 'a>(&mut self, callback: F) -> Result<ffi::uc_hook, uc_error>
|
||||||
where
|
where
|
||||||
F: FnMut(&mut Unicorn<D>, u32, usize),
|
F: FnMut(&mut Unicorn<D>, u32, usize) -> u32,
|
||||||
{
|
{
|
||||||
let mut hook_ptr = core::ptr::null_mut();
|
let mut hook_ptr = core::ptr::null_mut();
|
||||||
let mut user_data = Box::new(ffi::UcHook {
|
let mut user_data = Box::new(ffi::UcHook {
|
||||||
|
@ -309,6 +309,7 @@ fn x86_insn_in_callback() {
|
|||||||
let callback_insn = insn_cell.clone();
|
let callback_insn = insn_cell.clone();
|
||||||
let callback = move |_: &mut Unicorn<()>, port: u32, size: usize| {
|
let callback = move |_: &mut Unicorn<()>, port: u32, size: usize| {
|
||||||
*callback_insn.borrow_mut() = InsnInExpectation(port, size);
|
*callback_insn.borrow_mut() = InsnInExpectation(port, size);
|
||||||
|
42
|
||||||
};
|
};
|
||||||
|
|
||||||
let x86_code32: Vec<u8> = vec![0xe5, 0x10]; // IN eax, 0x10;
|
let x86_code32: Vec<u8> = vec![0xe5, 0x10]; // IN eax, 0x10;
|
||||||
@ -332,6 +333,7 @@ fn x86_insn_in_callback() {
|
|||||||
Ok(())
|
Ok(())
|
||||||
);
|
);
|
||||||
assert_eq!(expect, *insn_cell.borrow());
|
assert_eq!(expect, *insn_cell.borrow());
|
||||||
|
assert_eq!(emu.reg_read(RegisterX86::EAX), Ok(42));
|
||||||
assert_eq!(emu.remove_hook(hook), Ok(()));
|
assert_eq!(emu.remove_hook(hook), Ok(()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user