Skip to main content

ArchitectureHook

Trait ArchitectureHook 

Source
pub trait ArchitectureHook:
    Send
    + Sync
    + 'static {
Show 50 methods // Provided methods fn endianness(&self, base: &CoreArchitecture) -> Endianness { ... } fn address_size(&self, base: &CoreArchitecture) -> usize { ... } fn default_integer_size(&self, base: &CoreArchitecture) -> usize { ... } fn instruction_alignment(&self, base: &CoreArchitecture) -> usize { ... } fn linear_sweep_initial_alignment(&self, base: &CoreArchitecture) -> usize { ... } fn linear_sweep_analysis_capabilities(&self, base: &CoreArchitecture) -> u32 { ... } fn max_instr_len(&self, base: &CoreArchitecture) -> usize { ... } fn opcode_display_len(&self, base: &CoreArchitecture) -> usize { ... } fn associated_arch_by_addr( &self, base: &CoreArchitecture, addr: &mut u64, ) -> CoreArchitecture { ... } fn instruction_info( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> Option<InstructionInfo> { ... } fn instruction_text( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> Option<(usize, Vec<InstructionTextToken>)> { ... } fn instruction_text_with_context( &self, base: &CoreArchitecture, data: &[u8], addr: u64, context: Option<NonNull<c_void>>, ) -> Option<(usize, Vec<InstructionTextToken>)> { ... } fn instruction_llil( &self, base: &CoreArchitecture, data: &[u8], addr: u64, il: &LowLevelILMutableFunction, ) -> Option<(usize, bool)> { ... } fn analyze_basic_blocks( &self, base: &CoreArchitecture, function: &mut Function, context: &mut BasicBlockAnalysisContext, ) { ... } fn lift_function( &self, base: &CoreArchitecture, function: LowLevelILMutableFunction, context: &mut FunctionLifterContext, ) -> bool { ... } fn flag_write_llil<'a>( &self, base: &CoreArchitecture, flag: CoreFlag, flag_write_type: CoreFlagWrite, op: LowLevelILFlagWriteOp<CoreRegister>, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>> { ... } fn flags_required_for_flag_condition( &self, base: &CoreArchitecture, condition: FlagCondition, class: Option<CoreFlagClass>, ) -> Vec<CoreFlag> { ... } fn flag_cond_llil<'a>( &self, base: &CoreArchitecture, cond: FlagCondition, class: Option<CoreFlagClass>, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>> { ... } fn flag_group_llil<'a>( &self, base: &CoreArchitecture, group: CoreFlagGroup, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>> { ... } fn registers_all(&self, base: &CoreArchitecture) -> Vec<CoreRegister> { ... } fn register_from_id( &self, base: &CoreArchitecture, id: RegisterId, ) -> Option<CoreRegister> { ... } fn registers_full_width(&self, base: &CoreArchitecture) -> Vec<CoreRegister> { ... } fn registers_global(&self, base: &CoreArchitecture) -> Vec<CoreRegister> { ... } fn registers_system(&self, base: &CoreArchitecture) -> Vec<CoreRegister> { ... } fn stack_pointer_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister> { ... } fn link_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister> { ... } fn register_stacks(&self, base: &CoreArchitecture) -> Vec<CoreRegisterStack> { ... } fn register_stack_from_id( &self, base: &CoreArchitecture, id: RegisterStackId, ) -> Option<CoreRegisterStack> { ... } fn flags(&self, base: &CoreArchitecture) -> Vec<CoreFlag> { ... } fn flag_from_id( &self, base: &CoreArchitecture, id: FlagId, ) -> Option<CoreFlag> { ... } fn flag_write_types(&self, base: &CoreArchitecture) -> Vec<CoreFlagWrite> { ... } fn flag_write_from_id( &self, base: &CoreArchitecture, id: FlagWriteId, ) -> Option<CoreFlagWrite> { ... } fn flag_classes(&self, base: &CoreArchitecture) -> Vec<CoreFlagClass> { ... } fn flag_class_from_id( &self, base: &CoreArchitecture, id: FlagClassId, ) -> Option<CoreFlagClass> { ... } fn flag_groups(&self, base: &CoreArchitecture) -> Vec<CoreFlagGroup> { ... } fn flag_group_from_id( &self, base: &CoreArchitecture, id: FlagGroupId, ) -> Option<CoreFlagGroup> { ... } fn intrinsics(&self, base: &CoreArchitecture) -> Vec<CoreIntrinsic> { ... } fn intrinsic_class( &self, base: &CoreArchitecture, id: IntrinsicId, ) -> BNIntrinsicClass { ... } fn intrinsic_from_id( &self, base: &CoreArchitecture, id: IntrinsicId, ) -> Option<CoreIntrinsic> { ... } fn can_assemble(&self, base: &CoreArchitecture) -> bool { ... } fn assemble( &self, base: &CoreArchitecture, code: &str, addr: u64, ) -> Result<Vec<u8>, String> { ... } fn is_never_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool { ... } fn is_always_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool { ... } fn is_invert_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool { ... } fn is_skip_and_return_zero_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool { ... } fn is_skip_and_return_value_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool { ... } fn convert_to_nop( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool { ... } fn always_branch( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool { ... } fn invert_branch( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool { ... } fn skip_and_return_value( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, value: u64, ) -> bool { ... }
}
Expand description

Overrides selected operations of an already registered architecture.

Every method defaults to forwarding to base, the previous implementation in the hook chain. Override only the methods you need. Use the supplied base to delegate: looking up the hooked architecture by name inside a callback would call the hook again.

Flag-write operations without a typed representation are delivered as LowLevelILFlagWriteOp::Raw, including their complete operand list.

The methods have the same semantics as their counterparts in Architecture. Contextual disassembly forwards to the previous contextual implementation; override ArchitectureHook::instruction_text_with_context to change contextual text.

Register implementations with register_architecture_hook.

Provided Methods§

Source

fn endianness(&self, base: &CoreArchitecture) -> Endianness

Source

fn address_size(&self, base: &CoreArchitecture) -> usize

Source

fn default_integer_size(&self, base: &CoreArchitecture) -> usize

Source

fn instruction_alignment(&self, base: &CoreArchitecture) -> usize

Source

fn linear_sweep_initial_alignment(&self, base: &CoreArchitecture) -> usize

Source

fn linear_sweep_analysis_capabilities(&self, base: &CoreArchitecture) -> u32

Source

fn max_instr_len(&self, base: &CoreArchitecture) -> usize

Source

fn opcode_display_len(&self, base: &CoreArchitecture) -> usize

Source

fn associated_arch_by_addr( &self, base: &CoreArchitecture, addr: &mut u64, ) -> CoreArchitecture

Source

fn instruction_info( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> Option<InstructionInfo>

Source

fn instruction_text( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> Option<(usize, Vec<InstructionTextToken>)>

Source

fn instruction_text_with_context( &self, base: &CoreArchitecture, data: &[u8], addr: u64, context: Option<NonNull<c_void>>, ) -> Option<(usize, Vec<InstructionTextToken>)>

Source

fn instruction_llil( &self, base: &CoreArchitecture, data: &[u8], addr: u64, il: &LowLevelILMutableFunction, ) -> Option<(usize, bool)>

Source

fn analyze_basic_blocks( &self, base: &CoreArchitecture, function: &mut Function, context: &mut BasicBlockAnalysisContext, )

Source

fn lift_function( &self, base: &CoreArchitecture, function: LowLevelILMutableFunction, context: &mut FunctionLifterContext, ) -> bool

Source

fn flag_write_llil<'a>( &self, base: &CoreArchitecture, flag: CoreFlag, flag_write_type: CoreFlagWrite, op: LowLevelILFlagWriteOp<CoreRegister>, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>

Source

fn flags_required_for_flag_condition( &self, base: &CoreArchitecture, condition: FlagCondition, class: Option<CoreFlagClass>, ) -> Vec<CoreFlag>

Source

fn flag_cond_llil<'a>( &self, base: &CoreArchitecture, cond: FlagCondition, class: Option<CoreFlagClass>, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>

Source

fn flag_group_llil<'a>( &self, base: &CoreArchitecture, group: CoreFlagGroup, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>

Source

fn registers_all(&self, base: &CoreArchitecture) -> Vec<CoreRegister>

Source

fn register_from_id( &self, base: &CoreArchitecture, id: RegisterId, ) -> Option<CoreRegister>

Source

fn registers_full_width(&self, base: &CoreArchitecture) -> Vec<CoreRegister>

Source

fn registers_global(&self, base: &CoreArchitecture) -> Vec<CoreRegister>

Source

fn registers_system(&self, base: &CoreArchitecture) -> Vec<CoreRegister>

Source

fn stack_pointer_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister>

Source

fn register_stacks(&self, base: &CoreArchitecture) -> Vec<CoreRegisterStack>

Source

fn register_stack_from_id( &self, base: &CoreArchitecture, id: RegisterStackId, ) -> Option<CoreRegisterStack>

Source

fn flags(&self, base: &CoreArchitecture) -> Vec<CoreFlag>

Source

fn flag_from_id(&self, base: &CoreArchitecture, id: FlagId) -> Option<CoreFlag>

Source

fn flag_write_types(&self, base: &CoreArchitecture) -> Vec<CoreFlagWrite>

Source

fn flag_write_from_id( &self, base: &CoreArchitecture, id: FlagWriteId, ) -> Option<CoreFlagWrite>

Source

fn flag_classes(&self, base: &CoreArchitecture) -> Vec<CoreFlagClass>

Source

fn flag_class_from_id( &self, base: &CoreArchitecture, id: FlagClassId, ) -> Option<CoreFlagClass>

Source

fn flag_groups(&self, base: &CoreArchitecture) -> Vec<CoreFlagGroup>

Source

fn flag_group_from_id( &self, base: &CoreArchitecture, id: FlagGroupId, ) -> Option<CoreFlagGroup>

Source

fn intrinsics(&self, base: &CoreArchitecture) -> Vec<CoreIntrinsic>

Source

fn intrinsic_class( &self, base: &CoreArchitecture, id: IntrinsicId, ) -> BNIntrinsicClass

Source

fn intrinsic_from_id( &self, base: &CoreArchitecture, id: IntrinsicId, ) -> Option<CoreIntrinsic>

Source

fn can_assemble(&self, base: &CoreArchitecture) -> bool

Source

fn assemble( &self, base: &CoreArchitecture, code: &str, addr: u64, ) -> Result<Vec<u8>, String>

Source

fn is_never_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool

Source

fn is_always_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool

Source

fn is_invert_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool

Source

fn is_skip_and_return_zero_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool

Source

fn is_skip_and_return_value_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool

Source

fn convert_to_nop( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool

Source

fn always_branch( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool

Source

fn invert_branch( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool

Source

fn skip_and_return_value( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, value: u64, ) -> bool

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§