Skip to content

Commit ec808c9

Browse files
authored
Merge pull request #1575 from n1tram1/dev
Fix rust binding for insn_in hook callback
2 parents 6da43e2 + 9702e65 commit ec808c9

File tree

3 files changed

+4
-2
lines changed

3 files changed

+4
-2
lines changed

bindings/rust/src/ffi.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ pub extern "C" fn insn_in_hook_proxy<D, F>(
181181
size: usize,
182182
user_data: *mut UcHook<D, F>,
183183
) where
184-
F: FnMut(&mut crate::Unicorn<D>, u32, usize),
184+
F: FnMut(&mut crate::Unicorn<D>, u32, usize) -> u32,
185185
{
186186
let user_data = unsafe { &mut *user_data };
187187
debug_assert_eq!(uc, user_data.uc.get_handle());

bindings/rust/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ impl<'a, D> Unicorn<'a, D> {
758758
/// Add hook for x86 IN instruction.
759759
pub fn add_insn_in_hook<F: 'a>(&mut self, callback: F) -> Result<ffi::uc_hook, uc_error>
760760
where
761-
F: FnMut(&mut Unicorn<D>, u32, usize),
761+
F: FnMut(&mut Unicorn<D>, u32, usize) -> u32,
762762
{
763763
let mut hook_ptr = core::ptr::null_mut();
764764
let mut user_data = Box::new(ffi::UcHook {

bindings/rust/tests/unicorn.rs

+2
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ fn x86_insn_in_callback() {
309309
let callback_insn = insn_cell.clone();
310310
let callback = move |_: &mut Unicorn<()>, port: u32, size: usize| {
311311
*callback_insn.borrow_mut() = InsnInExpectation(port, size);
312+
42
312313
};
313314

314315
let x86_code32: Vec<u8> = vec![0xe5, 0x10]; // IN eax, 0x10;
@@ -332,6 +333,7 @@ fn x86_insn_in_callback() {
332333
Ok(())
333334
);
334335
assert_eq!(expect, *insn_cell.borrow());
336+
assert_eq!(emu.reg_read(RegisterX86::EAX), Ok(42));
335337
assert_eq!(emu.remove_hook(hook), Ok(()));
336338
}
337339

0 commit comments

Comments
 (0)