Commit Graph

300 Commits

Author SHA1 Message Date
flobernd 5a90a4d628
Removed `ZYDIS_INLINE` attribute from all exported `ZydisString*` functions 2018-02-26 23:12:57 +01:00
flobernd 0e60679470
Minor changes to the internal formatter logic
- `ZYDIS_FORMATTER_HOOK_PRINT_MEMSIZE` is now directly invoked by `ZYDIS_FORMATTER_HOOK_FORMAT_OPERAND_MEM`
2018-02-26 13:13:11 +01:00
flobernd 1483f854f2
Cosmetical fixes 2018-02-24 23:45:31 +01:00
flobernd 63f5b2f680
Minor refactorings
- Register enum is now auto generated
- Cosmetical changes
2018-02-24 20:59:35 +01:00
flobernd c6b3c5d242
Changed type of implicit memory operands to `ZYDIS_MEMOP_TYPE_MEM` instead of `ZYDIS_MEMOP_TYPE_INVALID` 2018-02-23 03:44:06 +01:00
flobernd 6a8825ead2
Renamed some string-functions to match the existing naming convention (`ZydisString*`) 2018-02-23 02:23:45 +01:00
flobernd 098b37d6e7
Fixed some operand definitions
- Changed destination operand action of `PEXT`, `PDEP` and `ANDN` from read/write to write-only
2018-02-22 16:01:39 +01:00
flobernd 2cd7018b5b
Added `MONITORX`, `MWAITX` and `ENCLV` instructions 2018-02-19 18:59:33 +01:00
flobernd 05aba7a445
Minor bugfixes 2018-02-08 01:48:37 +01:00
flobernd bbb864561d
More formatter changes
- 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)
2018-02-06 19:35:54 +01:00
flobernd 4e189721b2
Minor changes to the operand formatter hooks
`ZYDIS_FORMATTER_HOOK_PRE_OPERAND` and `ZYDIS_FORMATTER_HOOK_POST_OPERAND` can be used to omit a specific operand, if you return a status-code different to `ZYDIS_STATUS_SUCCESS`.
2018-02-05 23:49:50 +01:00
flobernd ca9898fa42
Omitting an operand by using formatter hooks will now correctly omit the semicolon as well 2018-02-05 23:34:54 +01:00
flobernd 74ef4ac22e
Fixed detection of bad gather registers in non 64-bit mode 2018-01-27 21:57:16 +01:00
flobernd 1f1be9fa21
Fixed non 64-bit mode mask-register error condition 2018-01-27 17:48:20 +01:00
flobernd 36f9172dad
Fixed some instruction definitions 2018-01-27 17:34:44 +01:00
flobernd 8c5e216e11
Fixed a bug in `ZydisRegisterGetClass`
resolves #29
2018-01-25 22:00:29 +01:00
flobernd 67e04ec52f
Updated license and version-info 2018-01-19 02:38:18 +01:00
flobernd 9a43872b90
Fixed operand size of some conditional jump instructions 2018-01-19 02:36:46 +01:00
flobernd 61f607e1df
Minor optimizations and bugfixes
- Fixed `XCHG R8, RAX` falsely beeing decoded as `NOP`
- Fixed `EVEX/MVEX.R'` not beeing ignored in 16- and 32-bit mode
- Removed some unnecessary conditions from operand-action related code
2018-01-17 00:31:32 +01:00
flobernd 7074e363f0
Fixed formatting of memory operands with explicit segment register 2018-01-14 18:49:56 +01:00
flobernd 57ccc70415
Optimized detection of bad register values 2018-01-11 22:30:23 +01:00
flobernd 9c71771875
Added missing `LOCK` prefix check for `3DNOW` encoded instructions 2018-01-11 02:39:43 +01:00
flobernd 7fb7eea11f
Bugfixes and table changes
- Fixed `SSE4A` ISA-set and ISA-ext
- Added missing `VEX`-encoded `GFNI` instructions
- Added check for invalid `GATHER`/`SCATTER` registers
2018-01-11 02:17:17 +01:00
flobernd 203dee3bfb
Bugfixes and table changes
- 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 SSE4a instructions (`EXTRQ`, `INSERTQ`, `MOVNTSD` and `MOVNTSS`)
- Added `VPOPCNTD`/`VPOPCNTQ` instructions with 128- and 256-bit vector-length
- Fixed exception-class of some `GFNI` instructions
- Fixed `RDRAND` and `RDSEED` instructions
- Fixed `SYSRET` instruction
2018-01-10 23:04:57 +01:00
flobernd fb519fe933
Internal refactorings and performance optimizations 2018-01-10 17:02:11 +01:00
flobernd 585fa7035a
Minor refactorings 2017-12-31 17:27:59 +01:00
flobernd 38c99667c4
Minor table changes
- Fixed `LWPINS` and `LWPVAL` instructions
- Added `PCONFIG` instruction
2017-12-20 23:36:59 +01:00
flobernd f8369ac13c
Minor table fixes
- Changed `XSAVE`/`XSAVEOPT` memory operand from W to RW
- Changed amount of bytes popped from stack by the `IRET` instruction
2017-12-20 09:56:51 +01:00
flobernd e4f9054c97
Changed size of `AVX2`-gather memory operands to match `AVX512`
The operand-size is now the size of a single element instead of the total size (like it already is for the `AVX512` gather/scatter instructions)
2017-12-10 10:44:59 +01:00
Joel Höner 82f72cf5a1
Fix register strings 2017-12-04 00:37:32 +01:00
Joel Höner 31c369d3f1 Merge branch 'feature/zydis-string' into develop
# Conflicts:
#	include/Zydis/Formatter.h
#	src/Formatter.c
2017-12-03 22:47:01 +01:00
flobernd dff821402b Refactored `ZydisFormatter`
- 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`
- Renamed some enums and types
- Revised documentation
- Fixed examples and tools
2017-12-03 22:38:20 +01:00
flobernd 451d7fb1a8 Fixed and refactored some enums
- Fixed `ZydisRegister` enum and string-table
- Renamed `ZYDIS_XXX_MAX_BITS` in `ZYDIS_XXX_MIN_BITS`
2017-12-03 22:38:20 +01:00
flobernd 043b1f5a5a Minor improvements to the instruction-formatter
- Added zero-termination for the output string of  `ZydisFormatterFormatInstruction` /  `ZydisFormatterFormatInstructionEx` in error cases
- Renamed some internal functions
2017-12-03 22:38:20 +01:00
flobernd 1d6c296c5f Renamed `ZydisStringAppendStaticEx` to `ZydisStringAppendExStatic` 2017-12-03 22:38:20 +01:00
flobernd 39facdf5fe Reworked `ZydisString` 2017-12-03 22:38:20 +01:00
Joel Höner 346b7fec10 Moved internal headers 2017-12-03 22:38:20 +01:00
flobernd 07c325b367 Minor bugfixes 2017-12-03 22:38:20 +01:00
flobernd a1d58c9ee7
Replaced `ZYDIS_FORMATTER_HOOK_PRINT_OPERAND_SEPARATOR` by `ZYDIS_FORMATTER_HOOK_PRE_OPERAND`/`ZYDIS_FORMATTER_HOOK_POST_OPERAND` 2017-12-02 19:42:30 +01:00
th0rex 022a4e7423 Add hook for operand seperator to formatter 2017-12-02 18:29:16 +01:00
flobernd 217d5cc9af
Minor refactorings and bugfixes 2017-12-02 06:54:47 +01:00
flobernd 71b21c4301
Renamed `ZydisInternalString` to `ZydisGeneratedString` 2017-12-02 06:40:40 +01:00
flobernd 02030c3b92
Various changes and refactorings
- Moved types and functions from `FormatHelper.h/c` to `String.h/c`
- Added `ZydisMnemonicGetStringEx` function that returns the mnemonic-string as `ZydisString` struct
- Added `ZYDIS_UNUSED_PARAMETER` macro
- Fixed omitting of operands in custom formatter-hooks
- Fixed `FormatterHooks` example
- Refactored some code
2017-12-02 06:36:12 +01:00
Joel Höner fa12ccb64b Switch to length aware string 2017-12-01 20:40:56 +01:00
flobernd 930c4df970
Removed `ZydisDecodedInstruction.instrPointer`
The instruction-pointer was always pointing to the next instruction (which is inconsistent for branch instructions). We can't always tell IF an instruction is going to branch (for the conditional ones), so we decided to completely remove it.

You can always manually combine `instrAddress` and `length` to calculate this value.
2017-12-01 20:21:25 +01:00
flobernd 1cd788f751
Minor table fixes 2017-12-01 01:18:25 +01:00
Joel Höner 58ce3a3e7f Removed forgotten stdint.h include 2017-11-30 08:03:34 +01:00
flobernd beeaa0e279
Added additional check for invalid AVX-512 zero masks 2017-11-29 22:47:09 +01:00
flobernd 6d690a4893 Improved file-size reduction for builds without `ZYDIS_FEATURE_EVEX`/`ZYDIS_FEATURE_MVEX` 2017-11-27 13:42:24 +01:00
Joel Höner a2cc8615ba Various minor no-libc fixes 2017-11-27 00:06:09 +01:00