mirror of
https://github.com/bitdefender/bddisasm.git
synced 2024-11-28 10:28:18 +00:00
107 lines
5.2 KiB
Markdown
107 lines
5.2 KiB
Markdown
# Changelog
|
|
|
|
All notable (user-facing) changes to this project will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
|
|
|
## [2.2.0] - 2024-09-16
|
|
|
|
### Added
|
|
- Support in bddisasm for AMD `RMPREAD` instruction.
|
|
- Support in bddisasm for Intel AVX 10.2 instructions.
|
|
|
|
### Fixed
|
|
- `LEAVE` instruction: size attribute for the `RSP` operand is stack address size, not operand size.
|
|
- `ENTER` instruction: size attribute for the `RSP` operand is operand size, not stack address size.
|
|
- `ENTER` instruction: added missing operands - `RBP` (stack address size), `[RBP]` (operand size).
|
|
- `EVEX` instructions in maps 5 & 6 may not be decoded if `ND_FEAT_APX` feature is not enabled.
|
|
|
|
### Changed
|
|
- Proper handling of the `EVEX.U` bit, depending on the instruction type.
|
|
- Removed APX encodings for SHA & KEYLOCKER instruction.
|
|
- Implemented new test scripts.
|
|
|
|
|
|
## [2.1.5] - 2024-05-28
|
|
|
|
### Fixed
|
|
- Potential unaligned load, as reported by UBSAN.
|
|
|
|
|
|
## [2.1.4] - 2024-03-27
|
|
|
|
### Changed
|
|
- Removed no longer needed static assert.
|
|
|
|
|
|
## [2.1.3] - 2024-03-04
|
|
|
|
### Changed
|
|
- Aligned BDDISASM APX instructions syntax with some of the Intel recomandations (using the suffix notation for `NF` and `ZU` indications, using finite set notation for `DFV` operands).
|
|
|
|
### Disassembly differences
|
|
- The `ZU` indication is appended as a mnemonic sufix, as per recomandations. However, in case of `SETcc` instructions, BDDISASM will append the `ZU` indication AFTER the condition code (similar to `CMPccXADD` and with initial `SETcc.ZU` specification).
|
|
- The `DFV` (default flags value) operand obeys the finite set notation, but it is placed as the last operand of the instruction.
|
|
|
|
|
|
## [2.1.2] - 2024-02-27
|
|
|
|
### Added
|
|
- `Read` access for the `rIP` operand for the `SYSCALL` instruction.
|
|
- `SCS`, `rCX`, `rDX` operands for the `SYSEXIT` instruction.
|
|
|
|
|
|
## [2.1.1] - 2024-02-26
|
|
|
|
### Added
|
|
- `Read` access for the `rIP` operand for some `CALL` instructions.
|
|
|
|
|
|
## [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`.
|