MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / __init__

Method __init__

python/architecture.py:2083–2342  ·  view source on GitHub ↗
(self, handle: core.BNArchitecture)

Source from the content-addressed store, hash-verified

2081
2082class CoreArchitecture(Architecture):
2083 def __init__(self, handle: core.BNArchitecture):
2084 super(CoreArchitecture, self).__init__()
2085
2086 self.handle = core.handle_of_type(handle, core.BNArchitecture)
2087 self.name = core.BNGetArchitectureName(self.handle)
2088 self.endianness = Endianness(core.BNGetArchitectureEndianness(self.handle))
2089 self.address_size = core.BNGetArchitectureAddressSize(self.handle)
2090 self.default_int_size = core.BNGetArchitectureDefaultIntegerSize(self.handle)
2091 self.instr_alignment = core.BNGetArchitectureInstructionAlignment(self.handle)
2092 self.max_instr_length = core.BNGetArchitectureMaxInstructionLength(self.handle)
2093 self.opcode_display_length = core.BNGetArchitectureOpcodeDisplayLength(self.handle)
2094 self.stack_pointer: str = core.BNGetArchitectureRegisterName(
2095 self.handle, core.BNGetArchitectureStackPointerRegister(self.handle)
2096 )
2097
2098 link_reg = core.BNGetArchitectureLinkRegister(self.handle)
2099 if link_reg == 0xffffffff:
2100 self.link_reg = None
2101 else:
2102 self.link_reg = core.BNGetArchitectureRegisterName(self.handle, link_reg)
2103
2104 count = ctypes.c_ulonglong()
2105 regs = core.BNGetAllArchitectureRegisters(self.handle, count)
2106 assert regs is not None, "core.BNGetAllArchitectureRegisters returned None"
2107 self._all_regs = {}
2108 self._regs_by_index = {}
2109 self._full_width_regs = {}
2110 self.regs = {}
2111 for i in range(0, count.value):
2112 name = RegisterName(core.BNGetArchitectureRegisterName(self.handle, regs[i]))
2113 assert name is not None, ""
2114 info = core.BNGetArchitectureRegisterInfo(self.handle, regs[i])
2115 full_width_reg = RegisterName(core.BNGetArchitectureRegisterName(self.handle, info.fullWidthRegister))
2116 self.regs[name] = RegisterInfo(
2117 full_width_reg, info.size, info.offset, ImplicitRegisterExtend(info.extend), regs[i]
2118 )
2119 self._all_regs[name] = regs[i]
2120 self._regs_by_index[regs[i]] = name
2121 for i in range(0, count.value):
2122 info = core.BNGetArchitectureRegisterInfo(self.handle, regs[i])
2123 full_width_reg = RegisterName(core.BNGetArchitectureRegisterName(self.handle, info.fullWidthRegister))
2124 if full_width_reg not in self._full_width_regs:
2125 self._full_width_regs[full_width_reg] = self._all_regs[full_width_reg]
2126 core.BNFreeRegisterList(regs)
2127
2128 count = ctypes.c_ulonglong()
2129 flags = core.BNGetAllArchitectureFlags(self.handle, count)
2130 assert flags is not None, "core.BNGetAllArchitectureFlags returned None"
2131 self._flags = {}
2132 self._flags_by_index = {}
2133 self.flags = []
2134 for i in range(0, count.value):
2135 name = FlagName(core.BNGetArchitectureFlagName(self.handle, flags[i]))
2136 self._flags[name] = flags[i]
2137 self._flags_by_index[flags[i]] = name
2138 self.flags.append(name)
2139 core.BNFreeRegisterList(flags)
2140

Callers

nothing calls this directly

Calls 7

IntrinsicInputClass · 0.85
IntrinsicInfoClass · 0.85
RegisterInfoClass · 0.70
RegisterStackInfoClass · 0.70
__init__Method · 0.45
appendMethod · 0.45
createMethod · 0.45

Tested by

no test coverage detected