Zydis Versions Save

Fast and lightweight x86/x86-64 disassembler and code generation library

v2.0.0

6 years ago

This is the final release of Zydis 2.

Detailed changelog (since v2.0.0-beta1)

  • Improved instruction decoding

    • Fixed decoding of XOP instructions
    • Fixed handling of illegal LOCK prefixes for XOP/VEX/EVEX/MVEX instructions
    • Significantly improved detection of bad register values
    • Added check for invalid GATHER registers
    • Fixed EVEX/MVEX.R' not beeing ignored in 16- and 32-bit mode
  • Improved formatter

    • Omitting an operand by using formatter hooks will now correctly omit the semicolon as well
    • ZYDIS_FORMATTER_HOOK_PRE_OPERAND and ZYDIS_FORMATTER_HOOK_POST_OPERAND can now be used to omit a specific operand
    • Added ZydisFormatterFormatOperand and ZydisFormatterFormatOperandEx (this won't print AVX-512/KNC decorators)
    • User defined callbacks should return ZYDIS_STATUS_SKIP_OPERAND to omit an operand (returning ZYDIS_STATUS_SUCCESS without writing to the buffer is now deprecated)
  • Added new instructions

    • PCONFIG
    • EXTRQ, INSERTQ, MOVNTSD, MOVNTSS (SSE4a)
    • MONITORX, MWAITX
    • ENCLV
    • VPOPCNTD/VPOPCNTQ instructions with 128- and 256-bit vector-length
    • Added missing VEX-encoded GFNI instructions
  • Fixed some instruction definitions

    • Changed XSAVE/XSAVEOPT memory operand from W to RW
    • Changed amount of bytes popped from stack by the IRET instruction
    • Fixed LWPINS and LWPVAL instructions
    • Fixed exception-class of some GFNI instructions
    • Fixed RDRAND and RDSEED instructions
    • Fixed SYSRET instruction
    • Fixed XCHG R8, RAX falsely beeing decoded as NOP
    • Fixed operand size of some conditional jump instructions
    • Changed destination operand action of PEXT, PDEP and ANDN from read/write to write-only
  • Misc bugfixes

    • Fixed formatting of memory operands with explicit segment register
    • Fixed a bug in ZydisRegisterGetClass that caused the function to report invalid register-classes for IP and FLAGS registers
    • Changed type of implicit memory operands to ZYDIS_MEMOP_TYPE_MEM instead of ZYDIS_MEMOP_TYPE_INVALID

v2.0.0-beta1

6 years ago

This is the first beta release, the public interface is now expected to be stable.

Detailed changelog (since v2.0.0-alpha2)

  • Added new ISA-extensions

    • BITALG
    • GFNI
    • RDPID
    • VAES
    • VBMI2
    • VNNI
    • VPCLMULQDQ
  • Added implicit operands for instructions with stack-operations

    • Implicit SP/ESP/RSP register-operand
    • Implicit [SP/ESP/RSP] memory-operand
  • Implemented decoder-modes to support ISA-extensions that conflict with existing instructions

    • Added decoder-modes
      • ZYDIS_DECODER_MODE_MINIMAL
      • ZYDIS_DECODER_MODE_AMD_BRANCHES
      • ZYDIS_DECODER_MODE_KNC
      • ZYDIS_DECODER_MODE_MPX
      • ZYDIS_DECODER_MODE_CET
      • ZYDIS_DECODER_MODE_LZCNT
      • ZYDIS_DECODER_MODE_TZCNT
    • Removed ZydisDecoderInitEx and the possibility to pass a decoder-granularity (use ZYDIS_DECODER_MODE_MINIMAL instead)
  • Decoder improvements

    • Instructions which are only valid in protected-mode are now rejected, if ZYDIS_MACHINE_MODE_REAL_16 is used
    • The scale of memory-operands is now correctly set to 1 in 16-bit mode, if an index register was specified
  • Major formatter changes

    • Switched to custom length-aware ZydisString "class" to improve performance and usability
    • Added ZydisFormatterSetAttribute function for simple formatter customization
      • ZYDIS_FORMATTER_PROP_UPPERCASE
      • ZYDIS_FORMATTER_PROP_FORCE_MEMSEG
      • ZYDIS_FORMATTER_PROP_FORCE_MEMSIZE
      • ZYDIS_FORMATTER_PROP_ADDR_FORMAT
      • ZYDIS_FORMATTER_PROP_DISP_FORMAT
      • ZYDIS_FORMATTER_PROP_IMM_FORMAT
      • ZYDIS_FORMATTER_PROP_HEX_UPPERCASE
      • ZYDIS_FORMATTER_PROP_HEX_PREFIX
      • ZYDIS_FORMATTER_PROP_HEX_SUFFIX
      • ZYDIS_FORMATTER_PROP_HEX_PADDING_ADDR
      • ZYDIS_FORMATTER_PROP_HEX_PADDING_DISP
      • ZYDIS_FORMATTER_PROP_HEX_PADDING_IMM
    • Hook refactorings
      • Added ZYDIS_FORMATTER_HOOK_PRE_OPERAND, ZYDIS_FORMATTER_HOOK_POST_OPERAND and ZYDIS_FORMATTER_HOOK_PRINT_REGISTER
      • Renamed ZYDIS_FORMATTER_HOOK_PRINT_DISPLACEMENT to ZYDIS_FORMATTER_HOOK_PRINT_DISP
      • Renamed ZYDIS_FORMATTER_HOOK_PRINT_IMMEDIATE to ZYDIS_FORMATTER_HOOK_PRINT_IMM
      • Renamed ZYDIS_FORMATTER_HOOK_PRINT_OPERANDSIZE to ZYDIS_FORMATTER_HOOK_PRINT_MEMSIZE
      • Removed ZYDIS_FORMATTER_HOOK_PRINT_SEGMENT
  • Improved no-libc support

    • Added ZYDIS_NO_LIBC CMake switch
    • When enabled, removes dependency on memset, memcpy and strlen
    • Added custom integer types
    • Added own NULL
  • Added project logo

  • Added Visual Studio project files

    • Static-, shared- and kernel-mode configuration
    • Contributed by Mattiwatti