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§
Sourcefn endianness(&self, base: &CoreArchitecture) -> Endianness
fn endianness(&self, base: &CoreArchitecture) -> Endianness
Sourcefn address_size(&self, base: &CoreArchitecture) -> usize
fn address_size(&self, base: &CoreArchitecture) -> usize
Sourcefn default_integer_size(&self, base: &CoreArchitecture) -> usize
fn default_integer_size(&self, base: &CoreArchitecture) -> usize
Sourcefn instruction_alignment(&self, base: &CoreArchitecture) -> usize
fn instruction_alignment(&self, base: &CoreArchitecture) -> usize
Sourcefn linear_sweep_initial_alignment(&self, base: &CoreArchitecture) -> usize
fn linear_sweep_initial_alignment(&self, base: &CoreArchitecture) -> usize
Sourcefn linear_sweep_analysis_capabilities(&self, base: &CoreArchitecture) -> u32
fn linear_sweep_analysis_capabilities(&self, base: &CoreArchitecture) -> u32
Sourcefn max_instr_len(&self, base: &CoreArchitecture) -> usize
fn max_instr_len(&self, base: &CoreArchitecture) -> usize
Sourcefn opcode_display_len(&self, base: &CoreArchitecture) -> usize
fn opcode_display_len(&self, base: &CoreArchitecture) -> usize
Sourcefn associated_arch_by_addr(
&self,
base: &CoreArchitecture,
addr: &mut u64,
) -> CoreArchitecture
fn associated_arch_by_addr( &self, base: &CoreArchitecture, addr: &mut u64, ) -> CoreArchitecture
Sourcefn instruction_info(
&self,
base: &CoreArchitecture,
data: &[u8],
addr: u64,
) -> Option<InstructionInfo>
fn instruction_info( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> Option<InstructionInfo>
Sourcefn instruction_text(
&self,
base: &CoreArchitecture,
data: &[u8],
addr: u64,
) -> Option<(usize, Vec<InstructionTextToken>)>
fn instruction_text( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> Option<(usize, Vec<InstructionTextToken>)>
Sourcefn instruction_text_with_context(
&self,
base: &CoreArchitecture,
data: &[u8],
addr: u64,
context: Option<NonNull<c_void>>,
) -> 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>)>
Sourcefn instruction_llil(
&self,
base: &CoreArchitecture,
data: &[u8],
addr: u64,
il: &LowLevelILMutableFunction,
) -> Option<(usize, bool)>
fn instruction_llil( &self, base: &CoreArchitecture, data: &[u8], addr: u64, il: &LowLevelILMutableFunction, ) -> Option<(usize, bool)>
Sourcefn analyze_basic_blocks(
&self,
base: &CoreArchitecture,
function: &mut Function,
context: &mut BasicBlockAnalysisContext,
)
fn analyze_basic_blocks( &self, base: &CoreArchitecture, function: &mut Function, context: &mut BasicBlockAnalysisContext, )
Sourcefn lift_function(
&self,
base: &CoreArchitecture,
function: LowLevelILMutableFunction,
context: &mut FunctionLifterContext,
) -> bool
fn lift_function( &self, base: &CoreArchitecture, function: LowLevelILMutableFunction, context: &mut FunctionLifterContext, ) -> bool
Sourcefn flag_write_llil<'a>(
&self,
base: &CoreArchitecture,
flag: CoreFlag,
flag_write_type: CoreFlagWrite,
op: LowLevelILFlagWriteOp<CoreRegister>,
il: &'a LowLevelILMutableFunction,
) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>
fn flag_write_llil<'a>( &self, base: &CoreArchitecture, flag: CoreFlag, flag_write_type: CoreFlagWrite, op: LowLevelILFlagWriteOp<CoreRegister>, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>
Sourcefn flags_required_for_flag_condition(
&self,
base: &CoreArchitecture,
condition: FlagCondition,
class: Option<CoreFlagClass>,
) -> Vec<CoreFlag>
fn flags_required_for_flag_condition( &self, base: &CoreArchitecture, condition: FlagCondition, class: Option<CoreFlagClass>, ) -> Vec<CoreFlag>
Sourcefn flag_cond_llil<'a>(
&self,
base: &CoreArchitecture,
cond: FlagCondition,
class: Option<CoreFlagClass>,
il: &'a LowLevelILMutableFunction,
) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>
fn flag_cond_llil<'a>( &self, base: &CoreArchitecture, cond: FlagCondition, class: Option<CoreFlagClass>, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>
Sourcefn flag_group_llil<'a>(
&self,
base: &CoreArchitecture,
group: CoreFlagGroup,
il: &'a LowLevelILMutableFunction,
) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>
fn flag_group_llil<'a>( &self, base: &CoreArchitecture, group: CoreFlagGroup, il: &'a LowLevelILMutableFunction, ) -> Option<LowLevelILMutableExpression<'a, ValueExpr>>
Sourcefn registers_all(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
fn registers_all(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
Sourcefn register_from_id(
&self,
base: &CoreArchitecture,
id: RegisterId,
) -> Option<CoreRegister>
fn register_from_id( &self, base: &CoreArchitecture, id: RegisterId, ) -> Option<CoreRegister>
Sourcefn registers_full_width(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
fn registers_full_width(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
Sourcefn registers_global(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
fn registers_global(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
Sourcefn registers_system(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
fn registers_system(&self, base: &CoreArchitecture) -> Vec<CoreRegister>
Sourcefn stack_pointer_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister>
fn stack_pointer_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister>
Sourcefn link_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister>
fn link_reg(&self, base: &CoreArchitecture) -> Option<CoreRegister>
Sourcefn register_stacks(&self, base: &CoreArchitecture) -> Vec<CoreRegisterStack>
fn register_stacks(&self, base: &CoreArchitecture) -> Vec<CoreRegisterStack>
Sourcefn register_stack_from_id(
&self,
base: &CoreArchitecture,
id: RegisterStackId,
) -> Option<CoreRegisterStack>
fn register_stack_from_id( &self, base: &CoreArchitecture, id: RegisterStackId, ) -> Option<CoreRegisterStack>
Sourcefn flags(&self, base: &CoreArchitecture) -> Vec<CoreFlag>
fn flags(&self, base: &CoreArchitecture) -> Vec<CoreFlag>
See Architecture::flags.
Sourcefn flag_from_id(&self, base: &CoreArchitecture, id: FlagId) -> Option<CoreFlag>
fn flag_from_id(&self, base: &CoreArchitecture, id: FlagId) -> Option<CoreFlag>
Sourcefn flag_write_types(&self, base: &CoreArchitecture) -> Vec<CoreFlagWrite>
fn flag_write_types(&self, base: &CoreArchitecture) -> Vec<CoreFlagWrite>
Sourcefn flag_write_from_id(
&self,
base: &CoreArchitecture,
id: FlagWriteId,
) -> Option<CoreFlagWrite>
fn flag_write_from_id( &self, base: &CoreArchitecture, id: FlagWriteId, ) -> Option<CoreFlagWrite>
Sourcefn flag_classes(&self, base: &CoreArchitecture) -> Vec<CoreFlagClass>
fn flag_classes(&self, base: &CoreArchitecture) -> Vec<CoreFlagClass>
Sourcefn flag_class_from_id(
&self,
base: &CoreArchitecture,
id: FlagClassId,
) -> Option<CoreFlagClass>
fn flag_class_from_id( &self, base: &CoreArchitecture, id: FlagClassId, ) -> Option<CoreFlagClass>
Sourcefn flag_groups(&self, base: &CoreArchitecture) -> Vec<CoreFlagGroup>
fn flag_groups(&self, base: &CoreArchitecture) -> Vec<CoreFlagGroup>
Sourcefn flag_group_from_id(
&self,
base: &CoreArchitecture,
id: FlagGroupId,
) -> Option<CoreFlagGroup>
fn flag_group_from_id( &self, base: &CoreArchitecture, id: FlagGroupId, ) -> Option<CoreFlagGroup>
Sourcefn intrinsics(&self, base: &CoreArchitecture) -> Vec<CoreIntrinsic>
fn intrinsics(&self, base: &CoreArchitecture) -> Vec<CoreIntrinsic>
Sourcefn intrinsic_class(
&self,
base: &CoreArchitecture,
id: IntrinsicId,
) -> BNIntrinsicClass
fn intrinsic_class( &self, base: &CoreArchitecture, id: IntrinsicId, ) -> BNIntrinsicClass
Sourcefn intrinsic_from_id(
&self,
base: &CoreArchitecture,
id: IntrinsicId,
) -> Option<CoreIntrinsic>
fn intrinsic_from_id( &self, base: &CoreArchitecture, id: IntrinsicId, ) -> Option<CoreIntrinsic>
Sourcefn can_assemble(&self, base: &CoreArchitecture) -> bool
fn can_assemble(&self, base: &CoreArchitecture) -> bool
Sourcefn assemble(
&self,
base: &CoreArchitecture,
code: &str,
addr: u64,
) -> Result<Vec<u8>, String>
fn assemble( &self, base: &CoreArchitecture, code: &str, addr: u64, ) -> Result<Vec<u8>, String>
Sourcefn is_never_branch_patch_available(
&self,
base: &CoreArchitecture,
data: &[u8],
addr: u64,
) -> bool
fn is_never_branch_patch_available( &self, base: &CoreArchitecture, data: &[u8], addr: u64, ) -> bool
Sourcefn is_always_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
Sourcefn is_invert_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
Sourcefn is_skip_and_return_zero_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
Sourcefn is_skip_and_return_value_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
Sourcefn convert_to_nop(
&self,
base: &CoreArchitecture,
data: &mut [u8],
addr: u64,
) -> bool
fn convert_to_nop( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool
Sourcefn always_branch(
&self,
base: &CoreArchitecture,
data: &mut [u8],
addr: u64,
) -> bool
fn always_branch( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool
Sourcefn invert_branch(
&self,
base: &CoreArchitecture,
data: &mut [u8],
addr: u64,
) -> bool
fn invert_branch( &self, base: &CoreArchitecture, data: &mut [u8], addr: u64, ) -> bool
Sourcefn skip_and_return_value(
&self,
base: &CoreArchitecture,
data: &mut [u8],
addr: u64,
value: u64,
) -> bool
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".