From 964dd202951270cc7b2761f01762a7d35f097a31 Mon Sep 17 00:00:00 2001 From: Peace-Maker Date: Thu, 13 Jul 2023 19:22:56 +0200 Subject: [PATCH 1/3] Update Python bindings for x86 --- bindings/python/capstone/__init__.py | 2 +- bindings/python/capstone/x86.py | 17 +++++++++++++++-- bindings/python/pyx/ccapstone.pyx | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/bindings/python/capstone/__init__.py b/bindings/python/capstone/__init__.py index 4ec23458d1..a0ed2f0a32 100755 --- a/bindings/python/capstone/__init__.py +++ b/bindings/python/capstone/__init__.py @@ -703,7 +703,7 @@ def __gen_detail(self): (self.prefix, self.opcode, self.rex, self.addr_size, \ self.modrm, self.sib, self.disp, \ self.sib_index, self.sib_scale, self.sib_base, self.xop_cc, self.sse_cc, \ - self.avx_cc, self.avx_sae, self.avx_rm, self.eflags, \ + self.avx_cc, self.avx_sae, self.avx_rm, self.eflags, self.fpu_flags, \ self.encoding, self.modrm_offset, self.disp_offset, self.disp_size, self.imm_offset, self.imm_size, \ self.operands) = x86.get_arch_info(self._raw.detail.contents.arch.x86) elif arch == CS_ARCH_M68K: diff --git a/bindings/python/capstone/x86.py b/bindings/python/capstone/x86.py index f8056f1a94..caa5e35ebd 100644 --- a/bindings/python/capstone/x86.py +++ b/bindings/python/capstone/x86.py @@ -43,6 +43,11 @@ def reg(self): def mem(self): return self.value.mem +class X86Flags(ctypes.Union): + _fields_ = ( + ('eflags', ctypes.c_uint64), + ('fpu_flags', ctypes.c_uint64), + ) class CsX86Encoding(ctypes.Structure): _fields_ = ( @@ -70,16 +75,24 @@ class CsX86(ctypes.Structure): ('avx_cc', ctypes.c_uint), ('avx_sae', ctypes.c_bool), ('avx_rm', ctypes.c_uint), - ('eflags', ctypes.c_uint64), + ('flags', X86Flags), ('op_count', ctypes.c_uint8), ('operands', X86Op * 8), ('encoding', CsX86Encoding), ) + @property + def eflags(self): + return self.flags.eflags + + @property + def fpu_flags(self): + return self.flags.fpu_flags + def get_arch_info(a): return (a.prefix[:], a.opcode[:], a.rex, a.addr_size, \ a.modrm, a.sib, a.disp, a.sib_index, a.sib_scale, \ - a.sib_base, a.xop_cc, a.sse_cc, a.avx_cc, a.avx_sae, a.avx_rm, a.eflags, \ + a.sib_base, a.xop_cc, a.sse_cc, a.avx_cc, a.avx_sae, a.avx_rm, a.eflags, a.fpu_flags, \ a.encoding, a.encoding.modrm_offset, a.encoding.disp_offset, a.encoding.disp_size, a.encoding.imm_offset, a.encoding.imm_size, \ copy_ctypes_list(a.operands[:a.op_count])) diff --git a/bindings/python/pyx/ccapstone.pyx b/bindings/python/pyx/ccapstone.pyx index dbc92f6e55..b6d0236a42 100644 --- a/bindings/python/pyx/ccapstone.pyx +++ b/bindings/python/pyx/ccapstone.pyx @@ -34,7 +34,7 @@ class CsDetail(object): self.modrm, self.sib, self.disp, \ self.sib_index, self.sib_scale, self.sib_base, \ self.xop_cc, self.sse_cc, self.avx_cc, self.avx_sae, self.avx_rm, \ - self.eflags, self.encoding, self.modrm_offset, self.disp_offset, \ + self.eflags, self.fpu_flags, self.encoding, self.modrm_offset, self.disp_offset, \ self.disp_size, self.imm_offset, self.imm_size, self.operands) = x86.get_arch_info(detail.arch.x86) elif arch == capstone.CS_ARCH_M68K: (self.operands, self.op_size) = m68k.get_arch_info(detail.arch.m68k) From 9df1aa8f220011669b226a86d453bd0913a90bd0 Mon Sep 17 00:00:00 2001 From: Peace-Maker Date: Thu, 13 Jul 2023 19:23:22 +0200 Subject: [PATCH 2/3] Update Python bindings for m68k --- bindings/python/capstone/m68k.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bindings/python/capstone/m68k.py b/bindings/python/capstone/m68k.py index 9cc8936548..9356462808 100644 --- a/bindings/python/capstone/m68k.py +++ b/bindings/python/capstone/m68k.py @@ -66,6 +66,10 @@ def simm(self): @property def reg(self): return self.value.reg + + @property + def reg_pair(self): + return self.value.reg_pair @property def mem(self): From fbf991c140bb104731edb1bc37c524b540bfbd71 Mon Sep 17 00:00:00 2001 From: Peace-Maker Date: Thu, 13 Jul 2023 19:23:59 +0200 Subject: [PATCH 3/3] Update Python bindings for mos65xx --- bindings/python/capstone/mos65xx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bindings/python/capstone/mos65xx.py b/bindings/python/capstone/mos65xx.py index 11b3462a58..87a5f87054 100644 --- a/bindings/python/capstone/mos65xx.py +++ b/bindings/python/capstone/mos65xx.py @@ -8,8 +8,8 @@ class MOS65xxOpValue(ctypes.Union): _fields_ = ( ('reg', ctypes.c_uint), - ('imm', ctypes.c_uint8), - ('mem', ctypes.c_uint16), + ('imm', ctypes.c_uint16), + ('mem', ctypes.c_uint32), ) class MOS65xxOp(ctypes.Structure):