MCPcopy Index your code
hub / github.com/keystone-engine/keypatch / get_hardware_mode

Method get_hardware_mode

keypatch.py:157–216  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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:
170 mode = KS_MODE_16
171 elif cpuname.startswith("arm"):
172 # ARM or ARM64
173 if info.is_64bit():
174 arch = KS_ARCH_ARM64
175 mode = KS_MODE_LITTLE_ENDIAN
176 else:
177 arch = KS_ARCH_ARM
178 # either big-endian or little-endian
179 if cpuname == "arm":
180 mode = KS_MODE_ARM | KS_MODE_LITTLE_ENDIAN
181 else:
182 mode = KS_MODE_ARM | KS_MODE_BIG_ENDIAN
183 elif cpuname.startswith("sparc"):
184 arch = KS_ARCH_SPARC
185 if info.is_64bit():
186 mode = KS_MODE_SPARC64
187 else:
188 mode = KS_MODE_SPARC32
189 if cpuname == "sparcb":
190 mode += KS_MODE_BIG_ENDIAN
191 else:
192 mode += KS_MODE_LITTLE_ENDIAN
193 elif cpuname.startswith("ppc"):
194 arch = KS_ARCH_PPC
195 if info.is_64bit():
196 mode = KS_MODE_PPC64
197 else:
198 mode = KS_MODE_PPC32
199 if cpuname == "ppc":
200 # do not support Little Endian mode for PPC
201 mode += KS_MODE_BIG_ENDIAN
202 elif cpuname.startswith("mips"):
203 arch = KS_ARCH_MIPS
204 if info.is_64bit():
205 mode = KS_MODE_MIPS64
206 else:
207 mode = KS_MODE_MIPS32
208 if cpuname == "mipsl":
209 mode += KS_MODE_LITTLE_ENDIAN
210 else:
211 mode += KS_MODE_BIG_ENDIAN
212 elif cpuname.startswith("systemz") or cpuname.startswith("s390x"):
213 arch = KS_ARCH_SYSTEMZ
214 mode = KS_MODE_BIG_ENDIAN

Callers 1

update_hardware_modeMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected