diff options
Diffstat (limited to 'rust/src/functionrecognizer.rs')
| -rw-r--r-- | rust/src/functionrecognizer.rs | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/rust/src/functionrecognizer.rs b/rust/src/functionrecognizer.rs deleted file mode 100644 index c63edcab..00000000 --- a/rust/src/functionrecognizer.rs +++ /dev/null @@ -1,107 +0,0 @@ -use crate::architecture::Architecture; -use crate::{ - architecture::CoreArchitecture, binaryview::BinaryView, function::Function, llil, mlil, -}; -use binaryninjacore_sys::*; -use std::os::raw::c_void; - -pub trait FunctionRecognizer { - fn recognize_low_level_il( - &self, - _bv: &BinaryView, - _func: &Function, - _llil: &llil::RegularFunction<CoreArchitecture>, - ) -> bool { - false - } - - fn recognize_medium_level_il( - &self, - _bv: &BinaryView, - _func: &Function, - _mlil: &mlil::MediumLevelILFunction, - ) -> bool { - false - } -} - -fn create_function_recognizer_registration<R>(recognizer: R) -> BNFunctionRecognizer -where - R: 'static + FunctionRecognizer + Send + Sync + Sized, -{ - #[repr(C)] - struct FunctionRecognizerHandlerContext<R> - where - R: 'static + FunctionRecognizer + Send + Sync, - { - recognizer: R, - } - - extern "C" fn cb_recognize_low_level_il<R>( - ctxt: *mut c_void, - bv: *mut BNBinaryView, - func: *mut BNFunction, - llil: *mut BNLowLevelILFunction, - ) -> bool - where - R: 'static + FunctionRecognizer + Send + Sync, - { - let custom_handler = unsafe { &*(ctxt as *mut R) }; - let bv = unsafe { BinaryView::from_raw(BNNewViewReference(bv)) }; - let arch = unsafe { BNGetFunctionArchitecture(func) }; - let func = unsafe { Function::from_raw(BNNewFunctionReference(func)) }; - if arch.is_null() { - return false; - } - let arch = unsafe { CoreArchitecture::from_raw(arch) }; - let llil = unsafe { llil::RegularFunction::from_raw(arch, llil) }; - custom_handler.recognize_low_level_il(bv.as_ref(), func.as_ref(), &llil) - } - - extern "C" fn cb_recognize_medium_level_il<R>( - ctxt: *mut c_void, - bv: *mut BNBinaryView, - func: *mut BNFunction, - mlil: *mut BNMediumLevelILFunction, - ) -> bool - where - R: 'static + FunctionRecognizer + Send + Sync, - { - let custom_handler = unsafe { &*(ctxt as *mut R) }; - let bv = unsafe { BinaryView::from_raw(BNNewViewReference(bv)) }; - let func = unsafe { Function::from_raw(BNNewFunctionReference(func)) }; - let mlil = unsafe { mlil::MediumLevelILFunction::ref_from_raw(mlil) }; - custom_handler.recognize_medium_level_il(bv.as_ref(), func.as_ref(), &mlil) - } - - let recognizer = FunctionRecognizerHandlerContext { recognizer }; - let raw = Box::into_raw(Box::new(recognizer)); - BNFunctionRecognizer { - context: raw as *mut _, - recognizeLowLevelIL: Some(cb_recognize_low_level_il::<R>), - recognizeMediumLevelIL: Some(cb_recognize_medium_level_il::<R>), - } -} - -pub fn register_global_function_recognizer<R>(recognizer: R) -where - R: 'static + FunctionRecognizer + Send + Sync + Sized, -{ - let mut recognizer = create_function_recognizer_registration::<R>(recognizer); - unsafe { - BNRegisterGlobalFunctionRecognizer(&mut recognizer as *mut _); - } -} - -pub(crate) fn register_arch_function_recognizer<R>(arch: &CoreArchitecture, recognizer: R) -where - R: 'static + FunctionRecognizer + Send + Sync + Sized, -{ - let mut recognizer = create_function_recognizer_registration::<R>(recognizer); - unsafe { - BNRegisterArchitectureFunctionRecognizer( - arch.handle().as_ref().0, - &mut recognizer as *mut _, - ); - } -} |
