mirror of
https://github.com/open-goal/jak-project
synced 2026-08-28 08:49:16 -04:00
bfc4c18ada
- Adds `capstone` as a disassembling library that could eventually replace Zydis (for now left that alone) - Replicates all of the existing x86 tests to ARM64, fixed a bunch of underlying issues along the way - There are a very small handful of tests remaining that need to be enabled / fixed
72 lines
1.4 KiB
Python
Vendored
Generated
72 lines
1.4 KiB
Python
Vendored
Generated
# Capstone Python bindings, by Dmitry Sibirtsev <sibirtsevdl@gmail.com>
|
|
|
|
import ctypes
|
|
from . import copy_ctypes_list
|
|
from .hppa_const import *
|
|
|
|
|
|
|
|
class HPPAOpMem(ctypes.Structure):
|
|
_fields_ = (
|
|
('base', ctypes.c_uint),
|
|
('space', ctypes.c_uint),
|
|
)
|
|
|
|
class HPPAModifierValue(ctypes.Union):
|
|
_fields_ = (
|
|
('str_mod', ctypes.c_char_p),
|
|
('int_mod', ctypes.c_uint32)
|
|
)
|
|
|
|
class HPPAModifier(ctypes.Structure):
|
|
_fields_ = (
|
|
('type', ctypes.c_int),
|
|
('value', HPPAModifierValue)
|
|
)
|
|
|
|
class HPPAExt(ctypes.Structure):
|
|
_fields_ = (
|
|
('modifiers', HPPAModifier * 5),
|
|
('mod_num', ctypes.c_uint8),
|
|
('b_writable', ctypes.c_bool),
|
|
('cmplt', ctypes.c_bool)
|
|
)
|
|
|
|
class HPPAOpValue(ctypes.Union):
|
|
_fields_ = (
|
|
('reg', ctypes.c_uint),
|
|
('imm', ctypes.c_int64),
|
|
('mem', HPPAOpMem)
|
|
)
|
|
|
|
|
|
class HPPAOp(ctypes.Structure):
|
|
_fields_ = (
|
|
('type', ctypes.c_uint8),
|
|
('value', HPPAOpValue),
|
|
('access', ctypes.c_uint)
|
|
)
|
|
|
|
@property
|
|
def imm(self):
|
|
return self.value.imm
|
|
|
|
@property
|
|
def reg(self):
|
|
return self.value.reg
|
|
|
|
@property
|
|
def mem(self):
|
|
return self.value.mem
|
|
|
|
|
|
# Instruction structure
|
|
class CsHPPA(ctypes.Structure):
|
|
_fields_ = (
|
|
('op_count', ctypes.c_uint8),
|
|
('operands', HPPAOp * 5)
|
|
)
|
|
|
|
def get_arch_info(a):
|
|
return (copy_ctypes_list(a.operands[:a.op_count]))
|