1This file details the changelog of Capstone. 2 3--------------------------------- 4Version 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--------------------------------- 55Version 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--------------------------------- 126Version 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--------------------------------- 175Version 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--------------------------------- 212Version 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--------------------------------- 253Version 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--------------------------------- 302Version 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--------------------------------- 379Version 2.1.2: April 3rd, 2014 380 381This is a stable release to fix some bugs deep in the core. There is no update 382to any architectures or bindings, so bindings version 2.1 can be used with this 383version 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--------------------------------- 395Version 2.1.1: March 13th, 2014 396 397This is a stable release to fix some bugs deep in the core. There is no update 398to any architectures or bindings, so bindings version 2.1 can be used with this 399version 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--------------------------------- 411Version 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---------------------------------- 485Version 2.0: January 22nd, 2014 486 487Release 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 engine’s 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