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