• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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