1
0
mirror of https://github.com/bitdefender/bddisasm.git synced 2024-12-22 22:18:09 +00:00
bddisasm/CHANGELOG.md

3.5 KiB

Changelog

All notable (user-facing) changes to this project will be documented in this file.

The format is based on Keep a Changelog.

[2.1.0] - 2024-02-20

Added

  • Support in bddisasm for Intel REX2 prefix.
  • Support in bddisasm for Intel APX extensions.
  • Support in bddisasm for Intel USERMSR extensions.
  • Support in bddisasm for prefix activation fields inside INSTRUX - these fields can be consulted to determine whether a particular prefix is present, accepted & active.
  • New feature in bdshemu: SHEMU_OPT_DIRECT_MAPPED_SHELL - allows emulation with a smaller IntBuff at the cost of not having WRITE_SELF detections. The shellcode can be provided directly from its original location, without the need to allocate it in a dedicated memory region.
  • New feature in bdshemu: SHEMU_OPT_TRACK_LOOPS - loops can now be tracked by bdshemu. SHEMU_OPT_TRACE_LOOPS can be used to log loop information.
  • Support in bdshemu for APX instructions (both REX2 and EVEX encoded instructions) - the new SHEMU_OPT_SUPPORT_APX must be set in order to enable APX emulation.

Changed

  • Reduced the size of the INSTRUX structure from 856 bytes to 488 bytes (almost -43%!).
  • Increased decoding performance from average 300 clocks/instruction to average 235 clocks/instruction (almost +20%!).
  • New decode options - do not decode implicit operands - this further increases performance from average 235 clocks/instruction to 200 clocks/instruction (almost +15%!).
  • Re-worked the Python scripts - both disasmlib.py and generate_tables.py have been significantly reworked, improving readability, and making them more efficient.
  • disasmtool builds on Linux.

Removed

  • Support for Cyrix & VIA instructions - only current Intel & AMD instructions remain supported.
  • disasmtool_lix has been removed. disasmtool is available on Linux as well.

Breaking changes

Inside INSTRUX

  • Removed Iclass field - it was aliased over Instruction field, which must be used from now on.
  • Removed OperandsEncodingMap field - one can consult the Encoding field in each operand to determine the encoding.
  • Removed ExceptionClass field - only ExceptionType remains, which contains an enum with all the exception types.
  • Removed Predicate field - only Condition remains, which was aliased over Predicate.
  • Removed HasImm3, Immediate3, Imm3Length and Imm3Offset fields, as they were not used/needed.
  • Removed Bhint, SseCondition, SignDisp fields, as they were not used.
  • Moved FlagsAccess.RegAccess outside and renamed it to RflAccess, to save more space.
  • Switched from char Mnemonic[32] to const char *Mnemonic - this decreases INSTRUX size by almost 32 bytes, and increases perf.

Inside ND_OPERAND

  • Removed RawSize - in most cases, Size and RawSize are identical; the only case where they might differ is for Immediate and RelativeOffset operands - in that case, one can consult the RawSize field in Immediate or RelativeOffset.

Inside ND_OPERAND_DECORATOR

  • Removed Broadcast field, moved it inside ND_OPDESC_MEMORY.
  • Removed HasSae, HasEr - they are per instruction, not per operand, and can be consulted directly inside INSTRUX.
  • Moved Msk one level up, inside the ND_OPERAND_DECORATOR structure.

Defines & constants

  • Removed ND_PRED_* defines - search & replace them with ND_COND_*.
  • Removed ND_HAS_PREDICATE - use ND_HAS_CONDITION instead.
  • Removed ND_VEND_GEODE and ND_VEND_CYRIX.