binaryninja.architecture.Architecture

class Architecture[source]

class Architecture is the parent class for all CPU architectures. Subclasses of Architecture implement assembly, disassembly, IL lifting, and patching.

class Architecture has a metaclass with the additional methods register, and supports iteration:

>>> #List the architectures
>>> list(Architecture)
[<arch: aarch64>, <arch: armv7>, <arch: thumb2>, <arch: armv7eb>, <arch: thumb2eb>, <arch: mipsel32>, <arch: mips32>, <arch: ppc>, <arch: ppc64>, <arch: ppc_le>, <arch: ppc64_le>, <arch: x86_16>, <arch: x86>, <arch: x86_64>]
>>> #Register a new Architecture
>>> class MyArch(Architecture):
...  name = "MyArch"
...
>>> MyArch.register()
>>> list(Architecture)
[<arch: aarch64>, <arch: armv7>, <arch: thumb2>, <arch: armv7eb>, <arch: thumb2eb>, <arch: mipsel32>, <arch: mips32>, <arch: ppc>, <arch: ppc64>, <arch: ppc_le>, <arch: ppc64_le>, <arch: x86_16>, <arch: x86>, <arch: x86_64>, <arch: MyArch>]
>>>

For the purposes of this documentation the variable arch will be used in the following context

>>> from binaryninja import *
>>> arch = Architecture['x86']

Note

The max_instr_length property of an architecture is not necessarily representative of the maximum instruction size of the associated CPU architecture. Rather, it represents the maximum size of a potential instruction that the architecture plugin can handle. So for example, the value for x86 is 16 despite the lagest valid instruction being only 15 bytes long, and the value for mips32 is currently 8 because multiple instrutions are decoded looking for delay slots so they can be reordered.

__init__()[source]

Initialize self. See help(type(self)) for accurate signature.

Methods

__init__()

Initialize self.

always_branch(data, addr)

always_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which always branches.

assemble(code[, addr])

assemble converts the string of assembly instructions code loaded at virtual address addr to the byte representation of those instructions.

convert_to_nop(data, addr)

convert_to_nop reads the instruction(s) in data at virtual address addr and returns a string of nop instructions of the same length as data.

get_associated_arch_by_address(addr)

get_default_flag_condition_low_level_il(…)

param LowLevelILFlagCondition cond

get_default_flag_write_low_level_il(op, …)

param LowLevelILOperation op

get_flag_by_name(flag)

get_flag_by_name get flag name for flag index.

get_flag_condition_low_level_il(cond, …)

param LowLevelILFlagCondition cond

Flag condition to be computed

get_flag_index(flag)

get_flag_name(flag)

get_flag_name gets a flag name from a flag number.

get_flag_role(flag[, sem_class])

get_flag_role gets the role of a given flag.

get_flag_write_low_level_il(op, size, …)

param LowLevelILOperation op

get_flag_write_type_by_name(write_type)

get_flag_write_type_by_name gets the flag write type name for the flag write type.

get_flag_write_type_name(write_type)

get_flag_write_type_name gets the flag write type name for the given flag.

get_flags_required_for_flag_condition(cond)

get_instruction_info(data, addr)

get_instruction_info returns an InstructionInfo object for the instruction at the given virtual address addr with data data.

get_instruction_low_level_il(data, addr, il)

get_instruction_low_level_il appends LowLevelILExpr objects to il for the instruction at the given virtual address addr with data data.

get_instruction_low_level_il_instruction(bv, …)

get_instruction_text(data, addr)

get_instruction_text returns a tuple containing a list of decoded InstructionTextToken objects and the bytes used at the given virtual address addr with data data.

get_intrinsic_index(intrinsic)

get_intrinsic_name(intrinsic)

get_intrinsic_name gets an intrinsic name from an intrinsic number.

get_low_level_il_from_bytes(data, addr)

get_low_level_il_from_bytes converts the instruction in bytes to il at the given virtual address

get_modified_regs_on_write(reg)

get_modified_regs_on_write returns a list of register names that are modified when reg is written.

get_reg_index(reg)

get_reg_name(reg)

get_reg_name gets a register name from a register number.

get_reg_stack_for_reg(reg)

get_reg_stack_index(reg_stack)

get_reg_stack_name(reg_stack)

get_reg_stack_name gets a register stack name from a register stack number.

get_semantic_flag_class_by_name(sem_class)

get_semantic_flag_class_by_name gets the semantic flag class index by name.

get_semantic_flag_class_index(sem_class)

get_semantic_flag_class_name(class_index)

get_semantic_flag_class_name gets the name of a semantic flag class from the index.

get_semantic_flag_group_by_name(sem_group)

get_semantic_flag_group_by_name gets the semantic flag group index by name.

get_semantic_flag_group_index(sem_group)

get_semantic_flag_group_low_level_il(…)

param str sem_group

get_semantic_flag_group_name(group_index)

get_semantic_flag_group_name gets the name of a semantic flag group from the index.

get_view_type_constant(type_name, const_name)

get_view_type_constant retrieves the view type constant for the given type_name and const_name.

invert_branch(data, addr)

invert_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which inverts the branch of provided instruction.

is_always_branch_patch_available(data, addr)

is_always_branch_patch_available determines if the instruction data at addr can be made to always branch.

is_invert_branch_patch_available(data, addr)

is_always_branch_patch_available determines if the instruction data at addr can be inverted.

is_never_branch_patch_available(data, addr)

is_never_branch_patch_available determines if the instruction data at addr can be made to never branch.

is_skip_and_return_value_patch_available(…)

is_skip_and_return_value_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns a value.

is_skip_and_return_zero_patch_available(…)

is_skip_and_return_zero_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns zero.

is_view_type_constant_defined(type_name, …)

param str type_name

the BinaryView type name of the constant to query

perform_always_branch(data, addr)

Deprecated method provided for compatibility.

perform_assemble(code, addr)

Deprecated method provided for compatibility.

perform_convert_to_nop(data, addr)

Deprecated method provided for compatibility.

perform_get_associated_arch_by_address(addr)

Deprecated method provided for compatibility.

perform_get_flag_condition_low_level_il(…)

Deprecated method provided for compatibility.

perform_get_flag_role(flag, sem_class)

Deprecated method provided for compatibility.

perform_get_flag_write_low_level_il(op, …)

Deprecated method provided for compatibility.

perform_get_flags_required_for_flag_condition(…)

Deprecated method provided for compatibility.

perform_get_instruction_info(data, addr)

Deprecated method provided for compatibility.

perform_get_instruction_low_level_il(data, …)

Deprecated method provided for compatibility.

perform_get_instruction_text(data, addr)

Deprecated method provided for compatibility.

perform_get_semantic_flag_group_low_level_il(…)

Deprecated method provided for compatibility.

perform_invert_branch(data, addr)

Deprecated method provided for compatibility.

perform_is_always_branch_patch_available(…)

Deprecated method provided for compatibility.

perform_is_invert_branch_patch_available(…)

Deprecated method provided for compatibility.

perform_is_never_branch_patch_available(…)

Deprecated method provided for compatibility.

perform_is_skip_and_return_value_patch_available(…)

Deprecated method provided for compatibility.

perform_is_skip_and_return_zero_patch_available(…)

Deprecated method provided for compatibility.

perform_skip_and_return_value(data, addr, value)

Deprecated method provided for compatibility.

register_calling_convention(cc)

register_calling_convention registers a new calling convention for the Architecture.

set_view_type_constant(type_name, …)

set_view_type_constant creates a new binaryview type constant.

skip_and_return_value(data, addr, value)

skip_and_return_value reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which doesn’t call and instead return a value.

Attributes

address_size

calling_conventions

Dict of CallingConvention objects (read-only)

can_assemble

returns if the architecture can assemble instructions (read-only)

default_int_size

endianness

flag_conditions_for_semantic_flag_group

flag_roles

flag_write_types

flags

flags_required_for_flag_condition

flags_required_for_semantic_flag_group

flags_written_by_flag_write_type

full_width_regs

List of full width register strings (read-only)

global_regs

instr_alignment

intrinsics

link_reg

list

max_instr_length

name

next_address

opcode_display_length

reg_stacks

regs

semantic_class_for_flag_write_type

semantic_flag_classes

semantic_flag_groups

stack_pointer

standalone_platform

Architecture standalone platform (read-only)

system_regs

type_libraries

Architecture type libraries