Minor PEP8 and linter-friendly changes
This commit is contained in:
@@ -14,6 +14,7 @@ from .types import UcReg128
|
|||||||
ARMCPReg = Tuple[int, int, int, int, int, int, int]
|
ARMCPReg = Tuple[int, int, int, int, int, int, int]
|
||||||
ARMCPRegValue = Tuple[int, int, int, int, int, int, int, int]
|
ARMCPRegValue = Tuple[int, int, int, int, int, int, int, int]
|
||||||
|
|
||||||
|
|
||||||
class UcRegCP(ctypes.Structure):
|
class UcRegCP(ctypes.Structure):
|
||||||
"""ARM coprocessors registers for instructions MRC, MCR, MRRC, MCRR
|
"""ARM coprocessors registers for instructions MRC, MCR, MRRC, MCRR
|
||||||
"""
|
"""
|
||||||
@@ -57,7 +58,6 @@ class UcAArch32(Uc):
|
|||||||
|
|
||||||
return next((cls for rng, cls in reg_class if reg_id in rng), None)
|
return next((cls for rng, cls in reg_class if reg_id in rng), None)
|
||||||
|
|
||||||
|
|
||||||
def reg_read(self, reg_id: int, aux: Any = None):
|
def reg_read(self, reg_id: int, aux: Any = None):
|
||||||
# select register class for special cases
|
# select register class for special cases
|
||||||
reg_cls = UcAArch32.__select_reg_class(reg_id)
|
reg_cls = UcAArch32.__select_reg_class(reg_id)
|
||||||
|
|||||||
@@ -91,7 +91,6 @@ class UcAArch64(Uc):
|
|||||||
|
|
||||||
return getattr(self, '_Uc__do_hook_add')(htype, fptr, begin, end, insn)
|
return getattr(self, '_Uc__do_hook_add')(htype, fptr, begin, end, insn)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __select_reg_class(reg_id: int):
|
def __select_reg_class(reg_id: int):
|
||||||
"""Select class for special architectural registers.
|
"""Select class for special architectural registers.
|
||||||
@@ -104,7 +103,6 @@ class UcAArch64(Uc):
|
|||||||
|
|
||||||
return next((cls for rng, cls in reg_class if reg_id in rng), None)
|
return next((cls for rng, cls in reg_class if reg_id in rng), None)
|
||||||
|
|
||||||
|
|
||||||
def reg_read(self, reg_id: int, aux: Any = None):
|
def reg_read(self, reg_id: int, aux: Any = None):
|
||||||
# select register class for special cases
|
# select register class for special cases
|
||||||
reg_cls = UcAArch64.__select_reg_class(reg_id)
|
reg_cls = UcAArch64.__select_reg_class(reg_id)
|
||||||
|
|||||||
@@ -145,7 +145,6 @@ class UcIntel(Uc):
|
|||||||
|
|
||||||
return getattr(self, '_Uc__do_hook_add')(htype, fptr, begin, end, insn)
|
return getattr(self, '_Uc__do_hook_add')(htype, fptr, begin, end, insn)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __select_reg_class(reg_id: int):
|
def __select_reg_class(reg_id: int):
|
||||||
"""Select class for special architectural registers.
|
"""Select class for special architectural registers.
|
||||||
@@ -161,7 +160,6 @@ class UcIntel(Uc):
|
|||||||
|
|
||||||
return next((cls for rng, cls in reg_class if reg_id in rng), None)
|
return next((cls for rng, cls in reg_class if reg_id in rng), None)
|
||||||
|
|
||||||
|
|
||||||
def reg_read(self, reg_id: int, aux: Any = None):
|
def reg_read(self, reg_id: int, aux: Any = None):
|
||||||
# select register class for special cases
|
# select register class for special cases
|
||||||
reg_cls = UcIntel.__select_reg_class(reg_id)
|
reg_cls = UcIntel.__select_reg_class(reg_id)
|
||||||
@@ -198,10 +196,8 @@ class UcIntel(Uc):
|
|||||||
else:
|
else:
|
||||||
self._reg_write(reg_id, reg_cls, value)
|
self._reg_write(reg_id, reg_cls, value)
|
||||||
|
|
||||||
|
|
||||||
def msr_read(self, msr_id: int) -> int:
|
def msr_read(self, msr_id: int) -> int:
|
||||||
return self._reg_read(const.UC_X86_REG_MSR, UcRegMSR, msr_id)
|
return self._reg_read(const.UC_X86_REG_MSR, UcRegMSR, msr_id)
|
||||||
|
|
||||||
|
|
||||||
def msr_write(self, msr_id: int, value: int) -> None:
|
def msr_write(self, msr_id: int, value: int) -> None:
|
||||||
self._reg_write(const.UC_X86_REG_MSR, UcRegMSR, (msr_id, value))
|
self._reg_write(const.UC_X86_REG_MSR, UcRegMSR, (msr_id, value))
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
|
|
||||||
uc_err = ctypes.c_int
|
uc_err = ctypes.c_int
|
||||||
uc_mode = ctypes.c_int
|
uc_mode = ctypes.c_int
|
||||||
uc_arch = ctypes.c_int
|
uc_arch = ctypes.c_int
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ class RegStateManager:
|
|||||||
|
|
||||||
return reg.value
|
return reg.value
|
||||||
|
|
||||||
def _reg_write(self, reg_id: int, regtype, value) -> None:
|
def _reg_write(self, reg_id: int, regtype: Type, value) -> None:
|
||||||
"""Register write helper method.
|
"""Register write helper method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -496,7 +496,7 @@ class Uc(RegStateManager):
|
|||||||
# we have to keep a reference to the callbacks so they do not get gc-ed
|
# we have to keep a reference to the callbacks so they do not get gc-ed
|
||||||
# see: https://docs.python.org/3/library/ctypes.html#callback-functions
|
# see: https://docs.python.org/3/library/ctypes.html#callback-functions
|
||||||
self._callbacks: MutableMapping[int, ctypes._FuncPointer] = {}
|
self._callbacks: MutableMapping[int, ctypes._FuncPointer] = {}
|
||||||
self._mmio_callbacks: MutableMapping[Tuple[int, int], Tuple[Optional[ctypes._FuncPointer], Optional[ctypes._FuncPointer]]] = {}
|
self._mmio_callbacks: MutableMapping[Tuple[int, int], Tuple[Optional[MMIO_READ_CFUNC], Optional[MMIO_WRITE_CFUNC]]] = {}
|
||||||
|
|
||||||
self._hook_exception: Optional[Exception] = None
|
self._hook_exception: Optional[Exception] = None
|
||||||
|
|
||||||
@@ -548,7 +548,6 @@ class Uc(RegStateManager):
|
|||||||
if self._hook_exception is not None:
|
if self._hook_exception is not None:
|
||||||
raise self._hook_exception
|
raise self._hook_exception
|
||||||
|
|
||||||
|
|
||||||
def emu_stop(self) -> None:
|
def emu_stop(self) -> None:
|
||||||
"""Stop emulation.
|
"""Stop emulation.
|
||||||
|
|
||||||
@@ -752,15 +751,15 @@ class Uc(RegStateManager):
|
|||||||
def __do_hook_add(self, htype: int, fptr: ctypes._FuncPointer, begin: int, end: int, *args: ctypes.c_int) -> int:
|
def __do_hook_add(self, htype: int, fptr: ctypes._FuncPointer, begin: int, end: int, *args: ctypes.c_int) -> int:
|
||||||
handle = uc_hook_h()
|
handle = uc_hook_h()
|
||||||
|
|
||||||
# TODO: we do not need a callback counter to reference the callback and user data anymore.
|
# TODO: we do not need a callback counter to reference the callback and user data anymore,
|
||||||
# that said, we could still use the hook handler as auxiliary data - but for that we would
|
# so just pass a dummy value. that value will become the unused 'key' argument
|
||||||
# need to pass a pointer since the handler is set by this very function call.
|
|
||||||
#
|
|
||||||
# for now just pass a dummy value
|
|
||||||
dummy = 0
|
dummy = 0
|
||||||
|
|
||||||
status = uclib.uc_hook_add(
|
status = uclib.uc_hook_add(
|
||||||
self._uch, ctypes.byref(handle), htype, fptr,
|
self._uch,
|
||||||
|
ctypes.byref(handle),
|
||||||
|
htype,
|
||||||
|
fptr,
|
||||||
ctypes.cast(dummy, ctypes.c_void_p),
|
ctypes.cast(dummy, ctypes.c_void_p),
|
||||||
ctypes.c_uint64(begin),
|
ctypes.c_uint64(begin),
|
||||||
ctypes.c_uint64(end),
|
ctypes.c_uint64(end),
|
||||||
@@ -1023,10 +1022,10 @@ class Uc(RegStateManager):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def ctl_get_exits(self) -> Sequence[int]:
|
def ctl_get_exits(self) -> Sequence[int]:
|
||||||
l = self.ctl_get_exits_cnt()
|
count = self.ctl_get_exits_cnt()
|
||||||
arr = (ctypes.c_uint64 * l)()
|
arr = (ctypes.c_uint64 * count)()
|
||||||
|
|
||||||
self.ctl(uc.UC_CTL_UC_EXITS, uc.UC_CTL_IO_READ, ctypes.cast(arr, ctypes.c_void_p), ctypes.c_size_t(l))
|
self.ctl(uc.UC_CTL_UC_EXITS, uc.UC_CTL_IO_READ, ctypes.cast(arr, ctypes.c_void_p), ctypes.c_size_t(count))
|
||||||
|
|
||||||
return tuple(i for i in arr)
|
return tuple(i for i in arr)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user