python: add debug() function
diff --git a/bindings/python/capstone/__init__.py b/bindings/python/capstone/__init__.py
index 9777165..c786a2f 100644
--- a/bindings/python/capstone/__init__.py
+++ b/bindings/python/capstone/__init__.py
@@ -1 +1 @@
-from capstone import Cs, CsError, cs_disasm_quick, cs_disasm_lite, cs_version, cs_version_bind, cs_support, CS_API_MAJOR, CS_API_MINOR, CS_ARCH_ARM, CS_ARCH_ARM64, CS_ARCH_MIPS, CS_ARCH_X86, CS_ARCH_PPC, CS_ARCH_ALL, CS_MODE_LITTLE_ENDIAN, CS_MODE_ARM, CS_MODE_THUMB, CS_OPT_SYNTAX, CS_OPT_SYNTAX_DEFAULT, CS_OPT_SYNTAX_INTEL, CS_OPT_SYNTAX_ATT, CS_OPT_SYNTAX_NOREGNAME, CS_OPT_DETAIL, CS_OPT_ON, CS_OPT_OFF, CS_MODE_16, CS_MODE_32, CS_MODE_64, CS_MODE_BIG_ENDIAN, CS_MODE_MICRO, CS_MODE_N64, CS_SUPPORT_DIET
+from capstone import Cs, CsError, cs_disasm_quick, cs_disasm_lite, cs_version, cs_version_bind, cs_support, debug, CS_API_MAJOR, CS_API_MINOR, CS_ARCH_ARM, CS_ARCH_ARM64, CS_ARCH_MIPS, CS_ARCH_X86, CS_ARCH_PPC, CS_ARCH_ALL, CS_MODE_LITTLE_ENDIAN, CS_MODE_ARM, CS_MODE_THUMB, CS_OPT_SYNTAX, CS_OPT_SYNTAX_DEFAULT, CS_OPT_SYNTAX_INTEL, CS_OPT_SYNTAX_ATT, CS_OPT_SYNTAX_NOREGNAME, CS_OPT_DETAIL, CS_OPT_ON, CS_OPT_OFF, CS_MODE_16, CS_MODE_32, CS_MODE_64, CS_MODE_BIG_ENDIAN, CS_MODE_MICRO, CS_MODE_N64, CS_SUPPORT_DIET
diff --git a/bindings/python/capstone/capstone.py b/bindings/python/capstone/capstone.py
index 9ead033..32033d8 100644
--- a/bindings/python/capstone/capstone.py
+++ b/bindings/python/capstone/capstone.py
@@ -10,6 +10,7 @@
'cs_version',
'cs_version_bind',
'cs_support',
+ 'debug',
'CS_API_MAJOR',
'CS_API_MINOR',
@@ -647,3 +648,30 @@
return
yield
+
+# print out debugging info
+def debug():
+ # Tricky: make a dummy call to cs_open() to initialize internal data.
+ # FIXME: core need to be fixed to avoid this.
+ try:
+ md = Cs(CS_ARCH_ALL, 0)
+ except:
+ pass
+
+ if cs_support(CS_SUPPORT_DIET):
+ diet = "diet"
+ else:
+ diet = "standard"
+
+ archs = { "arm": CS_ARCH_ARM, "arm64": CS_ARCH_ARM64, \
+ "mips": CS_ARCH_MIPS, "ppc": CS_ARCH_PPC, "x86": CS_ARCH_X86 }
+
+ all_archs = ""
+ keys = archs.keys()
+ keys.sort()
+ for k in keys:
+ if cs_support(archs[k]):
+ all_archs += "-%s" %k
+
+ return "python-%s%s" %(diet, all_archs)
+
diff --git a/bindings/python/pyx/ccapstone.pyx b/bindings/python/pyx/ccapstone.pyx
index 6d0958f..ca709a9 100644
--- a/bindings/python/pyx/ccapstone.pyx
+++ b/bindings/python/pyx/ccapstone.pyx
@@ -260,3 +260,30 @@
yield (insn.address, insn.size, insn.mnemonic, insn.op_str)
cc.cs_free(allinsn, res)
+
+
+# print out debugging info
+cdef debug():
+ # Tricky: make a dummy call to cs_open() to initialize internal data.
+ # FIXME: core need to be fixed to avoid this.
+ cdef cc.csh tmp
+ cc.cs_open(capstone.CS_ARCH_ALL, capstone.CS_ARM, &tmp)
+
+ if cc.cs_support(capstone.CS_SUPPORT_DIET):
+ diet = "diet"
+ else:
+ diet = "standard"
+
+ archs = { "arm": capstone.CS_ARCH_ARM, "arm64": capstone.CS_ARCH_ARM64, \
+ "mips": capstone.CS_ARCH_MIPS, "ppc": capstone.CS_ARCH_PPC, \
+ "x86": capstone.CS_ARCH_X86 }
+
+ all_archs = ""
+ keys = archs.keys()
+ keys.sort()
+ for k in keys:
+ if cc.cs_support(archs[k]):
+ all_archs += "-%s" %k
+
+ return "CYTHON-%s%s" %(diet, all_archs)
+