Home | History | Annotate | Download | only in capstone
      1 This file details the changelog of Capstone.
      2 
      3 ---------------------------------
      4 Version 3.0.5-rc3: July 31st, 2017
      5 
      6 
      7 [ Core ]
      8 
      9 - Fix compilation for MacOS kernel extension
     10 - cstool to support armbe and arm64be modes
     11 - Add nmake.bat for Windows build
     12 - Fix an integer overflow for Windows kernel driver
     13 - Support to embedded Capstone into MacOS kernel
     14 - cstool: fix mips64 mode
     15 - Fix a compiling error in MS Visual Studio 2015
     16 - Install pkgconfig file with CMake build
     17 - Fix SOVERSION property of CMake build
     18 - Properly handle switching to Endian mode at run-time for Arm, Arm64, Mips & Sparc
     19 - Fix MingW build
     20 - Better handle CMake installation for Linux 64bit
     21 
     22 
     23 [ X86 ]
     24 
     25 - Support BND prefix of Intel MPX extension
     26 - Correct operand size for CALL/JMP in 64bit mode with prefix 0x66
     27 - LOCK NOP is a valid instruction
     28 - Fix ATT syntax for instruction with zero offset segment register
     29 - LES/LDS are invalid in 64bit mode
     30 - Fix number of operands for some MOV instructions
     31 
     32 
     33 [ ARM ]
     34 
     35 - Fix POP reg to update SP register
     36 - Update flags for UADD8 instruction
     37 
     38 
     39 [ ARM64 ]
     40 
     41 - Better performance with new lookup table
     42 - Handle system registers added in ARMv8.1/2
     43 
     44 
     45 [ Java binding ]
     46 
     47 - Better handle input with invalid code
     48 
     49 
     50 [ Visual Basic binding ]
     51 
     52 - New binding
     53 
     54 ---------------------------------
     55 Version 3.0.5-rc2: March 2nd, 2017
     56 
     57 
     58 [ Core ]
     59 
     60 - Fix build for Visual Studio 2012
     61 - Fix X86_REL_ADDR macro
     62 - Add CS_VERSION_MAJOR, CS_VERSION_MINOR, CS_VERSION_EXTRA
     63 - Better support for embedding Capstone into Windows kernel drivers
     64 - Support to embedded Capstone into MacOS kernel
     65 - Support MacOS 10.11 and up
     66 - Better support for Cygwin
     67 - Support build packages for FreeBSD & DragonflyBSD
     68 - Add a command-line tool "cstool"
     69 - Properly handle switching to Endian mode at run-time for Arm, Arm64, Mips & Sparc
     70 
     71 
     72 [ X86 ]
     73 
     74 - Some random 16-bit code can be handled wrongly.
     75 - Remove abundant operand type X86_OP_FP
     76 - Fix instructions MOVQ, LOOP, LOOPE, LOOPNE, CALL/JMP rel16, REPNE LODSD, MOV *AX, MOFFS, FAR JMP/CALL
     77 - Add X86_REG_EFLAGS for STC and STD
     78 - Fix instruction attributes for SYSEXIT, MOVW, ROL, LGS, SLDT
     79 - Rename registers ST0-ST7 to be consistent with asm output
     80 
     81 
     82 [ ARM ]
     83 
     84 - Properly handle IT instruction
     85 - Fix LDRSB
     86 - Fix writeback for LDR
     87 - Fix Thumb BigEndian setup
     88 
     89 
     90 [ ARM64 ]
     91 
     92 - Fix arith extender
     93 - Fix writeback for LDR
     94 - Rename enum arm64_mrs_reg to arm64_sysreg
     95 
     96 
     97 [ PowerPC ]
     98 
     99 - Print 0 offset for memory operand
    100 
    101 
    102 [ Sparc ]
    103 
    104 - Fix POPC instruction
    105 
    106 
    107 [ Python binding ]
    108 
    109 - Better PyPy support
    110 - Add __version__
    111 - Better support for Python 3
    112 - Fix CS_SKIPDATA_CALLBACK prototype
    113 - Cast skipdata function inside binding to simplify the API
    114 
    115 
    116 [ Java binding ]
    117 
    118 - Better handle input with invalid code
    119 
    120 
    121 [ PowerShell ]
    122 
    123 - New binding
    124 
    125 ---------------------------------
    126 Version 3.0.4: July 15th, 2015
    127 
    128 
    129 [ Library ]
    130 
    131 - Improve cross-compile for Android using Android NDK.
    132 - Support cross-compile for AArch64 Android (with Linux GCC).
    133 - Removed osxkernel_inttypes.h that is incompatible with BSD license.
    134 - Make it possible to compile with CC having a space inside (like "ccache gcc").
    135 
    136 
    137 [ X86 ]
    138 
    139 - Fix a null pointer dereference bug on handling code with special prefixes.
    140 - Properly handle AL/AX/EAX operand for OUT instruction in AT&T syntax.
    141 - Print immediate operand in positive form in some algorithm instructions.
    142 - Properly decode some SSE instructions.
    143 
    144 
    145 [ PowerPC ]
    146 
    147 - Fixed a memory corruption bug.
    148 - Fixed a memory corruption bug for the engine built in DIET mode.
    149 
    150 
    151 [ Mips ]
    152 
    153 - Fixed instruction ID of SUBU instruction.
    154 - Fixed a memory corruption bug.
    155 
    156 
    157 [ Arm ]
    158 
    159 - Fixed a memory corruption bug on IT instruction.
    160 
    161 
    162 [ XCore ]
    163 
    164 - Fixed a memory corruption bug when instruction has a memory operand.
    165 
    166 
    167 [ Python ]
    168 
    169 - Support Virtualenv.
    170 - setup.py supports option --user if not in a virtualenv to allow for local usage.
    171 - Properly handle the destruction of Cs object in the case the shared library
    172   was already unloaded.
    173 
    174 ---------------------------------
    175 Version 3.0.3: May 08th, 2015
    176 
    177 
    178 [ Library ]
    179 
    180 - Support to embed into Mac OS X kernel extensions.
    181 - Now it is possible to compile Capstone with older C compilers, such as
    182   GCC 4.8 on Ubuntu 12.04.
    183 - Add "test_iter" to MSVC project.
    184 
    185 
    186 [ X86 ]
    187 
    188 - All shifted instructions SHL, SHR, SAL, SAR, RCL, RCR, ROL & ROR now support
    189   $1 as first operand in *AT&T* syntax (so we have "rcll $1, %edx" instead of
    190   "rcll %edx").
    191 - CMPXCHG16B is a valid instruction with LOCK prefix.
    192 - Fixed a segfault on the input of 0xF3.
    193 
    194 
    195 [ Arm ]
    196 
    197 - BLX instruction modifies PC & LR registers.
    198 
    199 
    200 [ Sparc ]
    201 
    202 - Improved displacement decoding for sparc banching instructions.
    203 
    204 
    205 [ Python binding ]
    206 
    207 - Fix for Cython so it can properly initialize.
    208 - X86Op.avx_zero_mask now has c_bool type, but not c_uint8 type.
    209 - Properly support compile with Cygwin & install binding (setup.py).
    210 
    211 ---------------------------------
    212 Version 3.0.2: March 11th, 2015
    213 
    214 
    215 [ Library ]
    216 
    217 - On *nix, only export symbols that are part of the API (instead of all
    218   the internal symbols).
    219 
    220 
    221 [ X86 ]
    222 
    223 - Do not consider 0xF2 as REPNE prefix if it is a part of instruction encoding.
    224 - Fix implicit registers read/written & instruction groups of some instructions.
    225 - More flexible on the order of prefixes, so better handle some tricky
    226   instructions.
    227 - REPNE prefix can go with STOS & MOVS instructions.
    228 - Fix a compilation bug for X86_REDUCE mode.
    229 - Fix operand size of instructions with operand PTR []
    230 
    231 
    232 [ Arm ]
    233 
    234 - Fix a bug where arm_op_mem.disp is wrongly calculated (in DETAIL mode).
    235 - Fix a bug on handling the If-Then block.
    236 
    237 
    238 [ Mips ]
    239 
    240 - Sanity check for the input size for MIPS64 mode.
    241 
    242 
    243 [ MSVC ]
    244 
    245 - Compile capstone.dll with static runtime MSVCR built in.
    246 
    247 
    248 [ Python binding ]
    249 
    250 - Fix a compiling issue of Cython binding with gcc 4.9.
    251 
    252 ---------------------------------
    253 Version 3.0.1: February 03rd, 2015
    254 
    255 [ X86 ]
    256 
    257 - Properly handle LOCK, REP, REPE & REPNE prefixes.
    258 - Handle undocumented immediates for SSE's (V)CMPPS/PD/SS/SD instructions.
    259 - Print LJUMP/LCALL without * as prefix for Intel syntax.
    260 - Handle REX prefix properly for segment/MMX related instructions (x86_64).
    261 - Instruction with length > 15 is consider invalid.
    262 - Handle some tricky encodings for instructions MOVSXD, FXCH, FCOM, FCOMP,
    263   FSTP, FSTPNCE, NOP.
    264 - Handle some tricky code for some X86_64 instructions with REX prefix.
    265 - Add missing operands in detail mode for PUSH , POP , IN/OUT reg, reg
    266 - MOV32ms & MOV32sm should reference word rather than dword.
    267 
    268 
    269 [ Arm64 ]
    270 
    271 - BL & BLR instructions do not read SP register.
    272 - Print absolute (rather than relative) address for instructions B, BL,
    273   CBNZ, ADR.
    274 
    275 
    276 [ Arm ]
    277 
    278 - Instructions ADC & SBC do not update flags.
    279 - BL & BLX do not read SP, but PC register.
    280 - Alias LDR instruction with operands [sp], 4 to POP.
    281 - Print immediate operand of MVN instruction in positive hexadecimal form.
    282 
    283 
    284 [ PowerPC ]
    285 
    286 - Fix some compilation bugs when DIET mode is enable.
    287 - Populate SLWI/SRWI instruction details with SH operand.
    288 
    289 
    290 [ Python binding ]
    291 
    292 - Fix a Cython bug when CsInsn.bytes returns a shorten array of bytes.
    293 - Fixed a memory leak for Cython disasm functions when we immaturely quit
    294   the enumeration of disassembled instructions.
    295 - Fix a NULL memory access issue when SKIPDATA & Detail modes are enable
    296   at the same time.
    297 - Fix a memory leaking bug when when we stop enumeration over the disassembled
    298   instructions prematurely.
    299 - Export generic operand types & groups (CS_OP_xxx & CS_GRP_xxx).
    300 
    301 ---------------------------------
    302 Version 3.0: November 19th, 2014
    303 
    304 [ API ]
    305 
    306 - New API: cs_disasm_iter & cs_malloc. See docs/README for tutorials.
    307 - Renamed cs_disasm_ex to cs_disasm (cs_disasm_ex is still supported, but
    308   marked obsolete to be removed in future)
    309 - Support SKIPDATA mode, so Capstone can jump over unknown data and keep going
    310   from the next legitimate instruction. See docs/README for tutorials.
    311 - More details provided in cs_detail struct for all architectures.
    312 - API version was bumped to 3.0.
    313 
    314 
    315 [ Bindings ]
    316 
    317 - Python binding supports Python3 (besides Python2).
    318 - Support Ocaml binding.
    319 - Java: add close() method to be used to deinitialize a Capstone object when
    320   no longer use it.
    321 
    322 
    323 [ Architectures ]
    324 
    325 - New architectures: Sparc, SystemZ & XCore.
    326 - Important bugfixes for Arm, Arm64, Mips, PowerPC & X86.
    327 - Support more instructions for Arm, Arm64, Mips, PowerPC & X86.
    328 - Always expose absolute addresses rather than relative addresses (Arm, Arm64,
    329   Mips, PPC, Sparc, X86).
    330 - Use common instruction operand types REG, IMM, MEM & FP across all
    331   architectures (to enable cross-architecture analysis).
    332 - Use common instruction group types across all architectures (to enable
    333   cross-architecture analysis).
    334 
    335 
    336 [ X86 ]
    337 
    338 - X86 engine is mature & handles all the malware tricks (that we are aware of).
    339 - Added a lot of new instructions (such as AVX512, 3DNow, etc).
    340 - Add prefix symbols X86_PREFIX_REP/REPNE/LOCK/CS/DS/SS/FS/GS/ES/OPSIZE/ADDRSIZE.
    341 - Print immediate in positive form & hexadecimal for AND/OR/XOR instructions.
    342 - More friendly disassembly for JMP16i (in the form segment:offset)
    343 
    344 
    345 [ Mips ]
    346 
    347 - Engine added supports for new hardware modes: Mips32R6 (CS_MODE_MIPS32R6) &
    348   MipsGP64 (CS_MODE_MIPSGP64).
    349 - Removed the ABI-only mode CS_MODE_N64.
    350 - New modes CS_MODE_MIPS32 & CS_MODE_MIPS64 (to use instead of CS_MODE_32 &
    351   CS_MODE_64).
    352 
    353 
    354 [ ARM ]
    355 
    356 - Support new mode CS_MODE_V8 for Armv8 A32 encodings.
    357 - Print immediate in positive form & hexadecimal for AND/ORR/EOR/BIC instructions
    358 
    359 
    360 [ ARM64 ]
    361 
    362 - Print immediate in hexadecimal for AND/ORR/EOR/TST instructions.
    363 
    364 
    365 [ PowerPC ]
    366 
    367 - Do not print a dot in front of absolute address.
    368 
    369 
    370 [ Other features ]
    371 
    372 - Support for Microsoft Visual Studio (so enable Windows native compilation).
    373 - Support CMake compilation.
    374 - Cross-compile for Android.
    375 - Build libraries/tests using XCode project
    376 - Much faster, while consuming less memory for all architectures.
    377 
    378 ---------------------------------
    379 Version 2.1.2: April 3rd, 2014
    380 
    381 This is a stable release to fix some bugs deep in the core. There is no update
    382 to any architectures or bindings, so bindings version 2.1 can be used with this
    383 version 2.1.2 just fine.
    384 
    385 [ Core changes]
    386 
    387 - Support cross-compilation for all iDevices (iPhone/iPad/iPod).
    388 - X86: do not print memory offset in negative form.
    389 - Fix a bug in X86 when Capstone cannot handle short instruction.
    390 - Print negative number above -9 without prefix 0x (arm64, mips, arm).
    391 - Correct the SONAME setup for library versioning (Linux, *BSD, Solaris).
    392 - Set library versioning for dylib of OSX.
    393 
    394 ---------------------------------
    395 Version 2.1.1: March 13th, 2014
    396 
    397 This is a stable release to fix some bugs deep in the core. There is no update
    398 to any architectures or bindings, so bindings version 2.1 can be used with this
    399 version 2.1.1 just fine.
    400 
    401 [ Core changes]
    402 
    403 - Fix a buffer overflow bug in Thumb mode (ARM). Some special input can
    404   trigger this flaw.
    405 - Fix a crash issue when embedding Capstone into OSX kernel. This should
    406   also enable Capstone to be embedded into other systems with limited stack
    407   memory size such as Linux kernel or some firmwares.
    408 - Use a proper SONAME for library versioning (Linux).
    409 
    410 ---------------------------------
    411 Version 2.1: March 5th, 2014
    412 
    413 [ API changes ]
    414 
    415 - API version has been bumped to 2.1.
    416 - Change prototype of cs_close() to be able to invalidate closed handle.
    417   See http://capstone-engine.org/version_2.1_API.html for more information.
    418 - Extend cs_support() to handle more query types, not only about supported
    419   architectures. This change is backward compatible, however, so existent code
    420   do not need to be modified to support this.
    421 - New query type CS_SUPPORT_DIET for cs_support() to ask about diet status of
    422   the engine.
    423 - New error code CS_ERR_DIET to report errors about newly added diet mode.
    424 - New error code CS_ERR_VERSION to report issue of incompatible versions between
    425   bindings & core engine.
    426 
    427 
    428 [ Core changes ]
    429 
    430 - On memory usage, Capstone uses about 40% less memory, while still faster
    431   than version 2.0.
    432 - All architectures are much smaller: binaries size reduce at least 30%.
    433   Especially, X86-only binary reduces from 1.9MB to just 720KB.
    434 - Support "diet" mode, in which engine size is further reduced (by around 40%)
    435   for embedding purpose. The price to pay is that we have to sacrifice some
    436   non-critical data fields. See http://capstone-engine.org/diet.html for more
    437   details.
    438 
    439 
    440 [ Architectures ]
    441 
    442 - Update all 5 architectures to fix bugs.
    443 - PowerPC:
    444 	- New instructions: FMR & MSYNC.
    445 - Mips:
    446 	- New instruction: DLSA
    447 - X86:
    448 	- Properly handle AVX-512 instructions.
    449 	- New instructions: PSETPM, SALC, INT1, GETSEC.
    450 	- Fix some memory leaking issues in case of prefixed instructions such
    451 	  as LOCK, REP, REPNE.
    452 
    453 
    454 [ Python binding ]
    455 
    456 - Verify the core version at initialization time. Refuse to run if its version
    457   is different from the core's version.
    458 - New API disasm_lite() added to Cs class. This light API only returns tuples of
    459   (address, size, mnemonic, op_str), rather than list of CsInsn objects. This
    460   improves performance by around 30% in some benchmarks.
    461 - New API version_bind() returns binding's version, which might differ from
    462   the core's API version if the binding is out-of-date.
    463 - New API debug() returns information on Cython support, diet status & archs
    464   compiled in.
    465 - Fixed some memory leaking bugs for Cython binding.
    466 - Fix a bug crashing Cython code when accessing @regs_read/regs_write/groups.
    467 - Support diet mode.
    468 
    469 
    470 [ Java binding ]
    471 
    472 - Fix some memory leaking bugs.
    473 - New API version() returns combined version.
    474 - Support diet mode.
    475 - Better support for detail option.
    476 
    477 
    478 [ Miscellaneous ]
    479 
    480 - make.sh now can uninstall the core engine. This is done with:
    481 
    482 	$ sudo ./make.sh uninstall
    483 
    484 ----------------------------------
    485 Version 2.0: January 22nd, 2014
    486 
    487 Release 2.0 deprecates verison 1.0 and brings a lot of crucial changes.
    488 
    489 [ API changes ]
    490 
    491 - API version has been bumped to 2.0 (see cs_version() API)
    492 - New API cs_strerror(errno) returns a string describing error code given
    493   in its only argument.
    494 - cs_version() now returns combined version encoding both major & minor versions.
    495 - New option CS_OPT_MODE allows to change engines mode at run-time with
    496   cs_option().
    497 - New option CS_OPT_MEM allows to specify user-defined functions for dynamically
    498   memory management used internally by Capstone. This is useful to embed Capstone
    499   into special environments such as kernel or firware.
    500 - New API cs_support() can be used to check if this lib supports a particular
    501   architecture (this is necessary since we now allow to choose which architectures
    502   to compile in).
    503 - The detail option is OFF by default now. To get detail information, it should be
    504   explicitly turned ON. The details then can be accessed using cs_insn.detail
    505   pointer (to newly added structure cs_detail)
    506 
    507 
    508 [ Core changes ]
    509 
    510 - On memory usage, Capstone uses much less memory, but a lot faster now.
    511 - User now can choose which architectures to be supported by modifying config.mk
    512   before compiling/installing.
    513 
    514 
    515 [ Architectures ]
    516 
    517 - Arm
    518      - Support Big-Endian mode (besides Little-Endian mode).
    519      - Support friendly register, so instead of output sub "r12,r11,0x14",
    520 	 we have "sub ip,fp,0x14".
    521 - Arm64: support Big-Endian mode (besides Little-Endian mode).
    522 - PowerPC: newly added.
    523 - Mips: support friendly register, so instead of output "srl $2,$1,0x1f",
    524      we have "srl $v0,$at,0x1f".
    525 - X86: bug fixes.
    526 
    527 
    528 [ Python binding ]
    529 
    530 - Python binding is vastly improved in performance: around 3 ~ 4 times faster
    531   than in 1.0.
    532 - Cython support has been added, which can further speed up over the default
    533   pure Python binding (up to 30% in some cases)
    534 - Function cs_disasm_quick() & Cs.disasm() now use generator (rather than a list)
    535   to return succesfully disassembled instructions. This improves the performance
    536   and reduces memory usage.
    537 
    538 
    539 [ Java binding ]
    540 
    541 - Better performance & bug fixes.
    542 
    543 
    544 [ Miscellaneous ]
    545 
    546 - Fixed some installation issues with Gentoo Linux.
    547 - Capstone now can easily compile/install on all *nix, including Linux, OSX,
    548   {Net, Free, Open}BSD & Solaris.
    549 
    550 ----------------------------------
    551 [Version 1.0]: December 18th, 2013
    552 
    553 - Initial public release.
    554 
    555