MCPcopy
hub / github.com/keystone-engine/keypatch / Keypatch_Asm

Class Keypatch_Asm

keypatch.py:112–866  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

110
111## Main Keypatch class
112class Keypatch_Asm:
113 # supported architectures
114 arch_lists = {
115 "X86 16-bit": (KS_ARCH_X86, KS_MODE_16), # X86 16-bit
116 "X86 32-bit": (KS_ARCH_X86, KS_MODE_32), # X86 32-bit
117 "X86 64-bit": (KS_ARCH_X86, KS_MODE_64), # X86 64-bit
118 "ARM": (KS_ARCH_ARM, KS_MODE_ARM), # ARM
119 "ARM Thumb": (KS_ARCH_ARM, KS_MODE_THUMB), # ARM Thumb
120 "ARM64 (ARMV8)": (KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN),# ARM64
121 "Hexagon": (KS_ARCH_HEXAGON, KS_MODE_BIG_ENDIAN), # Hexagon
122 "Mips32": (KS_ARCH_MIPS, KS_MODE_MIPS32), # Mips32
123 "Mips64": (KS_ARCH_MIPS, KS_MODE_MIPS64), # Mips64
124 "PowerPC 32": (KS_ARCH_PPC, KS_MODE_PPC32), # PPC32
125 "PowerPC 64": (KS_ARCH_PPC, KS_MODE_PPC64), # PPC64
126 "Sparc 32": (KS_ARCH_SPARC, KS_MODE_SPARC32), # Sparc32
127 "Sparc 64": (KS_ARCH_SPARC, KS_MODE_SPARC64), # Sparc64
128 "SystemZ": (KS_ARCH_SYSTEMZ, KS_MODE_BIG_ENDIAN), # SystemZ
129 }
130
131 endian_lists = {
132 "Little Endian": KS_MODE_LITTLE_ENDIAN, # little endian
133 "Big Endian": KS_MODE_BIG_ENDIAN, # big endian
134 }
135
136 syntax_lists = {
137 "Intel": KS_OPT_SYNTAX_INTEL,
138 "Nasm": KS_OPT_SYNTAX_NASM,
139 "AT&T": KS_OPT_SYNTAX_ATT
140 }
141
142 def __init__(self, arch=None, mode=None):
143 # update current arch and mode
144 self.update_hardware_mode()
145
146 # override arch & mode if provided
147 if arch is not None:
148 self.arch = arch
149 if mode is not None:
150 self.mode = mode
151
152 # IDA uses Intel syntax by default
153 self.syntax = KS_OPT_SYNTAX_INTEL
154
155 # return Keystone arch & mode (with endianess included)
156 @staticmethod
157 def get_hardware_mode():
158 (arch, mode) = (None, None)
159
160 # heuristically detect hardware setup
161 info = idaapi.get_inf_structure()
162 cpuname = info.procName.lower()
163 if cpuname == "metapc":
164 arch = KS_ARCH_X86
165 if info.is_64bit():
166 mode = KS_MODE_64
167 elif info.is_32bit():
168 mode = KS_MODE_32
169 else:

Callers 1

initMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected