(self, handle: core.BNArchitecture)
| 2081 | |
| 2082 | class 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 |
nothing calls this directly
no test coverage detected