cython: add comments for all API methods
diff --git a/bindings/python/pyx/ccapstone.pyx b/bindings/python/pyx/ccapstone.pyx
index f0afb33..6d0958f 100644
--- a/bindings/python/pyx/ccapstone.pyx
+++ b/bindings/python/pyx/ccapstone.pyx
@@ -47,32 +47,39 @@
def __cinit__(self, _detail):
self._detail = _detail
+ # defer to CsDetail structure for everything else.
def __getattr__(self, name):
_detail = self._detail
if not _detail:
raise CsError(capstone.CS_ERR_DETAIL)
return getattr(_detail, name)
+ # return instruction's operands.
@property
def operands(self):
return self._detail.operands
+ # return instruction's ID.
@property
def id(self):
return self._raw.id
+ # return instruction's address.
@property
def address(self):
return self._raw.address
+ # return instruction's size.
@property
def size(self):
return self._raw.size
+ # return instruction's machine bytes (which should have @size bytes).
@property
def bytes(self):
return bytearray(self._raw.bytes)[:self._raw.size]
+ # return instruction's mnemonic.
@property
def mnemonic(self):
if _diet:
@@ -81,6 +88,7 @@
return self._raw.mnemonic
+ # return instruction's operands (in string).
@property
def op_str(self):
if _diet:
@@ -89,10 +97,11 @@
return self._raw.op_str
+ # return list of all implicit registers being read.
@property
def regs_read(self):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide @regs_read
raise CsError(capstone.CS_ERR_DIET)
if self._detail:
@@ -101,10 +110,11 @@
raise CsError(capstone.CS_ERR_DETAIL)
+ # return list of all implicit registers being modified
@property
def regs_write(self):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide @regs_write
raise CsError(capstone.CS_ERR_DIET)
if self._detail:
@@ -113,10 +123,11 @@
raise CsError(capstone.CS_ERR_DETAIL)
+ # return list of semantic groups this instruction belongs to.
@property
def groups(self):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide @groups
raise CsError(capstone.CS_ERR_DIET)
if self._detail:
@@ -132,7 +143,7 @@
# get the register name, given the register ID
def reg_name(self, reg_id):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide register's name
raise CsError(capstone.CS_ERR_DIET)
return cc.cs_reg_name(self._csh, reg_id)
@@ -140,7 +151,7 @@
# get the instruction string
def insn_name(self):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide instruction's name
raise CsError(capstone.CS_ERR_DIET)
return cc.cs_insn_name(self._csh, self.id)
@@ -148,7 +159,7 @@
# verify if this insn belong to group with id as @group_id
def group(self, group_id):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide @groups
raise CsError(capstone.CS_ERR_DIET)
return group_id in self.groups
@@ -156,7 +167,7 @@
# verify if this instruction implicitly read register @reg_id
def reg_read(self, reg_id):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide @regs_read
raise CsError(capstone.CS_ERR_DIET)
return reg_id in self.regs_read
@@ -164,7 +175,7 @@
# verify if this instruction implicitly modified register @reg_id
def reg_write(self, reg_id):
if _diet:
- # Diet engine cannot provide @mnemonic & @op_str
+ # Diet engine cannot provide @regs_write
raise CsError(capstone.CS_ERR_DIET)
return reg_id in self.regs_write
@@ -210,6 +221,7 @@
raise CsError(status)
+ # Disassemble binary & return disassembled instructions in CsInsn objects
def disasm(self, code, addr, count=0):
cdef cc.cs_insn *allinsn
@@ -230,6 +242,9 @@
cc.cs_free(allinsn, res)
+ # Light function to disassemble binary. This is about 20% faster than disasm() because
+ # unlike disasm(), disasm_lite() only return tuples of (address, size, mnemonic, op_str),
+ # rather than CsInsn objects.
def disasm_lite(self, code, addr, count=0):
# TODO: dont need detail, so we might turn off detail, then turn on again when done
cdef cc.cs_insn *allinsn