Release 3.0.3 is a stable version with important fixes in the core & Python bindings.
Library
Released binaries for Windows are now compatible with Windows XP.
Support to embed into Mac OS X kernel extensions.
Now it is possible to compile Capstone with older C compilers, such as GCC 4.8 on Ubuntu 12.04.
Add test_iter to MSVC project.
X86
All shifted instructions (SHL, SHR, SAL, SAR, RCL, RCR, ROL & ROR) now support $1 as first operand in AT&T syntax (so we have rcll $1, %edx instead of rcll %edx).
CMPXCHG16B is a valid instruction with LOCK prefix.
Fixed a segfault on the input of 0xF3.
Arm
BLX instruction modifies PC & LR registers.
Sparc
Improved displacement decoding for sparc banching instructions.
Python binding
Fix for Cython so it can properly initialize.
X86Op.avx_zero_mask now has c_bool type, but not c_uint8 type.
Properly support compile with Cygwin & install binding (setup.py).
Release 2.1.2 is a stable version with some minor bugfixes and improvements in the core.
Core changes
Support cross-compilation for all iDevices (iPhone/iPad/iPod).
X86: do not print memory offset in negative form.
Fix a bug in X86 when Capstone cannot handle short instruction.
Print negative numbers in range [-9, -1] without prefix 0x (arm64, mips, arm).
Correct the SONAME setup for library versioning on Linux, *BSD & Solaris.
Set library versioning for dylib of OSX.
Remove the redundant include/diet.h
NOTE
This release fixes the library versioning for Mac OSX, Linux, *BSD & Solaris. This might require recompiling tools compiled with prior Capstone - but there is no need to modify tools’ source whatsoever.
This version made no API change, so old bindings of release 2.1 still work just fine. The only exception is Python binding package for Windows in Download section: users still need to upgrade this since this package actually includes the new core engine 2.1.2 inside.
Release 2.1.1 is a bugfix version which fixes some security & stable issues.
Core changes
Fix a buffer overflow bug in Thumb mode (ARM). For this reason, all ARM users should upgrade.
Fix a crash issue when embedding Capstone into Mac OSX kernel by reducing the stack memory usage. This should also enable Capstone to be embedded into other systems with limited stack memory size such as Linux kernel or some firmwares.
Use a proper SONAME for library versioning (Linux).
NOTE
This version made no API change, so old bindings of release 2.1 still work just fine. The only exception is Python binding package for Windows in Download section: users still need to upgrade this since this package actually includes the new core engine 2.1.1 inside.
Extend cs_support() to handle more query types, not only about supported
architectures. This change is backward compatible, however, so existent code
do not need to be modified to support this.
New query type CS_SUPPORT_DIET for cs_support() to ask about diet status of
the engine.
New error code CS_ERR_DIET to report errors about newly added diet mode.
New error code CS_ERR_VERSION to report issue of incompatible versions between
bindings & core engine.
Core changes
On memory usage, Capstone uses about 40% less memory, while still faster
than version 2.0.
All architectures are much smaller: binaries size reduce at least 30%.
Especially, X86-only binary reduces from 1.9MB to just 720KB.
Support diet mode, in which engine size is further reduced (by around 40%)
for embedding purpose. The price to pay is that we have to sacrifice some
non-critical data fields. See http://capstone-engine.org/diet.html for more
details.
Architectures
Update all 5 architectures to fix bugs.
PowerPC:
New instructions: FMR & MSYNC.
Mips:
New instruction: DLSA
X86:
Properly handle AVX-512 instructions.
New instructions: PSETPM, SALC, INT1, GETSEC.
Fix some memory leaking issues in case of prefixed instructions such as LOCK, REP, REPNE.
Python binding
Verify the core version at initialization time. Refuse to run if its version
is different from the core’s version.
New API disasm_lite() added to Cs class. This light API only returns tuples of
(address, size, mnemonic, op_str), rather than list of CsInsn objects. This
improves performance by around 30% in some benchmarks.
New API version_bind() returns binding’s version, which might
differ from the core’s API version if binding is out-of-date.
New API debug() returns information on Cython support, diet status, archs
compiled in & versions of core & binding.
Fixed some memory leaking bugs for Cython binding.
Fix a bug crashing Cython code when accessing @regs_read/regs_write/groups.
Support diet mode.
Java binding
Fix some memory leaking bugs.
New API version() returns combined API version.
Support diet mode.
Better support for detail option.
Miscellaneous
make.sh now can uninstall the core engine. This is done with:
Release 2.0 deprecates verison 1.0 and brings a lot of crucial changes: see here on how to modify 1.0-based code to work with 2.0 API.
API changes:
API version has been bumped to 2.0 (see cs_version() API)
New API cs_strerror(errno) returns a string describing error code given in its only argument.
cs_version() now returns combined version encoding both major & minor versions.
New option CS_OPT_MODE allows to change engine’s mode at run-time with cs_option() API.
New option CS_OPT_MEM allows to specify user-defined functions for dynamically memory management used internally by Capstone. This is useful to embed Capstone into special environments such as kernel or firware.
New API cs_support() can be used to check if this lib supports a particular architecture (this is necessary since we now allow to choose which architectures to compile in).
The detail option is OFF by default now. To get detail information, it should be explicitly turned ON. The details then can be accessed using cs_insn.detail pointer (to newly added structure cs_detail)
Core changes
On memory usage, Capstone uses much less memory, but a lot faster now.
User now can choose which architectures to be supported by modifying config.mk file before compiling/installing.
Architectures
Arm
Support Big-Endian mode (besides Little-Endian mode).
Support friendly register, so instead of output sub r12,r11,0x14, we have sub ip,fp,0x14.
Arm64: support Big-Endian mode (besides Little-Endian mode).
Mips: support friendly register, so instead of output srl $2,$1,0x1f, we have srl $v0,$at,0x1f.
PowerPC: newly added.
X86: bug fixes.
Python binding
Python binding is vastly improved in performance: around 3 ~ 4 times faster than in 1.0.
Cython support has been added, which can further speed up over the default pure Python binding (up to 60% in some benchmarks)
Function cs_disasm_quick() & Cs.disasm() now use generator (rather than a list) to return succesfully disassembled instructions. This improves the performance and reduces memory usage.
Java binding
Better performance & bug fixes.
Miscellaneous
Fixed some installation issues with Gentoo Linux.
Capstone now can easily compile/install on all *nix, including Linux, OSX, {Net, Free, Open}BSD & Solaris.