1 ChangeLog from 2.1.2 to 3.0 rc1
aquynh edited this page 2014-11-18 07:01:51 -08:00

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() to cs_disasm(). Still support cs_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 out r11 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