Table of Contents
Below is the ChangeLog from 2.1.2 to 3.0-rc1
-
Updated cores of all architectures to upstream (LLVM), added a lot of new instructions.
-
PPC: support a lot of alias instructions (this feature is unavailable in upstream LLVM)
-
API: rename the API
cs_disasm_ex()
tocs_disasm()
. Still supportcs_disasm_ex()
, but marked it as deprecated - to be removed in some future version. -
OSX build/install: now
make.sh
builds & installs universal binaries for x86 and x86_64 Mac. Install go into/usr/local
rather than/usr
, thus integrate better with XCode. -
X86: properly handle RIP relative addressing instructions in 64bit mode.
-
Ocaml binding is now working: [https://github.com/aquynh/capstone/blob/next/bindings/ocaml/README] (https://github.com/aquynh/capstone/blob/next/bindings/ocaml/README)
-
X86: Add new x86 instruction groups VM, INT, IRET, CALL & RET.
-
Fixed compilation on Sparc & Mips when using GCC toolchain.
-
Faster core: the core of all archs have been optimized and run faster with almost-zero heap memory consumed. Especially, X86 engine is 3 ~ 4 times faster now.
-
ARM: add 4 new instructions ASRS, LSRS, VCLE, VCLT.
-
Python: fix an use-after-free bug.
-
CMake: support CMake, so now Capstone supports all the compilers supported by CMake. See https://github.com/aquynh/capstone/blob/next/COMPILE_CMAKE.TXT
-
XCore: support XCore architecture. See tests/test_xcore.c for C sample, bindings/python/test_xcore.py for Python sample or bindings/java/TestXcore.java for Java sample.
-
NodeJS binding: Capstone now has NodeJS binding: https://github.com/parasyte/node-capstone. This is created & maintained independently by Jason Oster.
-
X86: REP/REPNE prefixes are only relevant with MOVS/CMPS/SCAS/LODS/INS/OUTS instructions.
-
MIPS: handle register names for MIPS_REG_HI, MIPS_REG_LO, and MIPS_REG_PC registers in cs_reg_name().
-
Visual Studio: now Capstone can be natively compiled on Windows using Microsoft Visual Studio 2010 & up: https://github.com/aquynh/capstone/blob/next/COMPILE_MSVC.TXT
-
Arm64: do not consider WZR & XZR alias registers. For this reason, we now have 2 more registers ARM64_REG_WZR & ARM64_REG_XZR (see https://github.com/aquynh/capstone/blob/next/include/arm64.h)
-
Python: handle invalid arguments (zero value) for methods reg_name() & insn_name() of class CsInsn.
-
Fixed the crash issue on Gentoo Linux.
-
Arm: properly handle relative branch instructions: now target addresses are fixed to reflect the real addresses, not just encoding addresses.
-
X86: support 3DNow instructions (at the moment, upstream LLVM cannot do this).
-
Support out-of-tree build, so the generated binaries will be gathered into a place. Do this by passing the built directory to
make.sh
, as followings.$ BUILDDIR=build ./make.sh
-
Rename config.mk's option USE_SYS_DYN_MEM to CAPSTONE_USE_SYS_DYN_MEM.
-
It is now possible to customize Capstone without having to edit config.mk. This can be done by passing the desired options on commandline to
make.sh
, as followings.$ CAPSTONE_ARCH="arm aarch64 x86" CAPSTONE_USE_SYS_DYN_MEM=no CAPSTONE_DIET=yes CAPSTONE_X86_REDUCE=yes ./make.sh
-
X86: handle another NOP instruction with opcode 0f18 (Example: 0f1838 = NOP dword ptr [eax])
-
X86: handle instructions with LOCK/REP/REPNE prefix after other prefixes.
-
X86: fixes some tricky instructions: BOUND, MOVcr/rc/dr/rd.
-
X86: handle FSTP & FSTPNCE instructions introduced in http://blogs.technet.com/b/mmpc/archive/2013/06/24/investigation-of-a-new-undocumented-instruction-trick.aspx
-
X86: properly handle TEST instructions with opcode 0xF6, 0xF7 (MRM1m, MRM1r)
-
X86: properly handle arithmetic instructions with 0x82 opcode.
-
X86 : handle Hint NOP instructions: see http://code.google.com/p/corkami/wiki/x86oddities?show=content
-
X86: handle SAL instructions properly.
-
Python3 support is available. To install Python3 module, do:
$ cd bindings/python $ sudo make install3
Of course, Python2 module can still be installed with:
$ cd bindings/python $ sudo make install
See https://github.com/aquynh/capstone/blob/next/bindings/python/README for further instructions
-
Arm: print negative address Imm without prefix 0x if Imm >= -9
-
Add SKIPDATA mode. See http://capstone-engine.org/skipdata.html for more details.
For sample C code, see https://github.com/aquynh/capstone/blob/next/tests/test_skipdata.c
For sample Python code, see https://github.com/aquynh/capstone/blob/next/bindings/python/test_skipdata.py
-
Support cross-compile for Android devices - this requires Android NDK installed.
$ ./make.sh cross-android
-
New compile time option CAPSTONE_X86_REDUCE: http://capstone-engine.org/x86reduce.html
Also added new cs_support option named CS_SUPPORT_X86_REDUCE to check for this reduce status.
-
SystemZ architecture support was added.
For sample C code, see tests/test*.c.
For sample Python code, see test*.py under https://github.com/aquynh/capstone/tree/next/bindings/python
For sample Java code, see test*.java under https://github.com/aquynh/capstone/tree/next/bindings/java
-
ARM: support assembly syntax CS_OPT_SYNTAX_NOREGNAME printing out registers with numbers (ex: rather than register name
fp
(default), printing outr11
instead) -
API version bumped to 2.2 due to the addition of Sparc.
-
Sparc: add Sparc architecture support, including SparcV9.
Checkout -next branch
To checkout next branch, simply do this:
$ git pull
$ git checkout next
Then make sure to compile and install new code:
$ ./make.sh
$ sudo ./make.sh install
The next branch is frequently updated, so make sure to always get the latest code with:
$ git pull origin next
Any time you want to get back to master branch, do:
$ git checkout master