diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-06-09 23:13:14 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-09 17:13:14 +0200 |
| commit | ab5c42f0dcc90d1452103bd2dd763a095c8f0144 (patch) | |
| tree | 118b5ca9f8db3a881d0c2a91dd5d7793aac43c77 | |
| parent | b19dc0db89ab4fdaa1a7c379e30d608a89f29163 (diff) | |
| download | box64-ab5c42f0dcc90d1452103bd2dd763a095c8f0144.tar.gz box64-ab5c42f0dcc90d1452103bd2dd763a095c8f0144.zip | |
[TRACE] Added support for libzydis v4.x and removed the in-house zydis header (#2720)
* [TRACE] Exclude non-trace build from relying on in-house Zydis header * [TRACE] Upgrade zydis to version 4.x * [TRACE] Update docs * [TRACE] Update CI * [TRACE] No reason to drop 3.x support
| -rw-r--r-- | .github/workflows/release.yml | 26 | ||||
| -rw-r--r-- | CMakeLists.txt | 7 | ||||
| -rw-r--r-- | docs/COMPILE.md | 2 | ||||
| -rw-r--r-- | src/emu/x64trace.c | 185 | ||||
| -rw-r--r-- | src/emu/x86zydis.h | 4400 |
5 files changed, 150 insertions, 4470 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c972f98f..3d70df44 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,6 +65,12 @@ jobs: type: StaticBuild - platform: WOW64 type: Box32 + - platform: ANDROID + type: Trace + - platform: TERMUX + type: Trace + - platform: LARCH64 + type: Trace runs-on: ${{ matrix.os }} steps: @@ -75,7 +81,7 @@ jobs: run: | sudo apt-get update if [[ ${{ matrix.platform }} != 'X64' && ${{ matrix.platform }} != 'RISCV' && ${{ matrix.platform }} != 'LARCH64' ]]; then - sudo apt-get -y install git cmake make python3 patchelf + sudo apt-get -y install git cmake make python3 patchelf libzydis-dev if [[ ${{ matrix.platform }} == 'ANDROID' || ${{ matrix.platform }} == 'TERMUX' ]]; then sudo apt-get -y install p7zip wget -q https://dl.google.com/android/repository/android-ndk-r26b-linux.zip @@ -120,11 +126,11 @@ jobs: if [[ ${{ matrix.platform }} == 'X64' ]]; then echo "BOX64_PLATFORM_MARCRO=-DLD80BITS=1 -DNOALIGN=1" >> $GITHUB_ENV echo "BOX64_COMPILER=gcc" >> $GITHUB_ENV - sudo apt-get -y install git cmake make python3 + sudo apt-get -y install git cmake make python3 libzydis-dev elif [[ ${{ matrix.platform }} == 'RISCV' ]]; then echo BOX64_PLATFORM_MARCRO="-DRV64=ON" >> $GITHUB_ENV echo "BOX64_COMPILER=riscv64-linux-gnu-gcc" >> $GITHUB_ENV - sudo apt-get -y install git gcc-riscv64-linux-gnu cmake make python3 ninja-build libglib2.0-dev + sudo apt-get -y install git gcc-riscv64-linux-gnu cmake make python3 ninja-build libglib2.0-dev libzydis-dev elif [[ ${{ matrix.platform }} == 'LARCH64' ]]; then sudo mkdir /usr/local/larch wget -O- -q https://github.com/loongson/build-tools/releases/download/2023.08.08/CLFS-loongarch64-8.1-x86_64-cross-tools-gcc-glibc.tar.xz | sudo tar -C /usr/local/larch --strip-components=1 --xz -xf - @@ -139,11 +145,11 @@ jobs: echo BOX64_PLATFORM_MARCRO="-DLARCH64=ON" >> $GITHUB_ENV echo "BOX64_COMPILER=loongarch64-linux-gnu-gcc" >> $GITHUB_ENV - sudo apt-get -y install git cmake make python3 + sudo apt-get -y install git cmake make python3 libzydis-dev else echo BOX64_PLATFORM_MARCRO="-DARM_DYNAREC=ON" >> $GITHUB_ENV echo "BOX64_COMPILER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV - sudo apt-get -y install git gcc-aarch64-linux-gnu cmake make python3 + sudo apt-get -y install git gcc-aarch64-linux-gnu cmake make python3 libzydis-dev fi fi if [[ ${{ matrix.type }} == 'Release' ]]; then @@ -167,6 +173,11 @@ jobs: echo BOX64_STATICBUILD=0 >> $GITHUB_ENV echo BOX64_BOX32=0 >> $GITHUB_ENV fi + if [[ ${{ matrix.os }} == 'ubuntu-22.04-arm' ]]; then + echo "BOX64_ZYDIS3=1" >> $GITHUB_ENV + else + echo "BOX64_ZYDIS3=0" >> $GITHUB_ENV + fi - name: "Get XuanTie QEMU Cache Key" if: matrix.platform == 'RISCV' @@ -217,6 +228,7 @@ jobs: ${{ env.BOX64_PLATFORM_MARCRO }}\ -DCMAKE_BUILD_TYPE=${{ env.BOX64_BUILD_TYPE }}\ -DHAVE_TRACE=${{ env.BOX64_HAVE_TRACE }}\ + -DZYDIS3=${{ env.BOX64_ZYDIS3 }}\ -DSTATICBUILD=${{ env.BOX64_STATICBUILD }}\ -DBOX32=${{ env.BOX64_BOX32 }}\ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON\ @@ -326,14 +338,14 @@ jobs: 7z -tzip -mx=5 a box64-latest.rat files pkg-header - name: "Upload WCP file" - if: matrix.platform == 'ANDROID_GLIBC' && matrix.type != 'StaticBuild' + if: matrix.platform == 'ANDROID_GLIBC' && matrix.type == 'Release' uses: actions/upload-artifact@v4 with: name: box64-latest-${{ matrix.type }}-wcp path: build/box64-latest.wcp - name: "Upload Rat File" - if: matrix.platform == 'ANDROID' && matrix.type != 'StaticBuild' + if: matrix.platform == 'ANDROID' && matrix.type == 'Release' uses: actions/upload-artifact@v4 with: name: box64-MiceWine-${{ matrix.type }} diff --git a/CMakeLists.txt b/CMakeLists.txt index b41929ed..9842b628 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,8 @@ option(ANDROID "Set to ON if targeting an Android device" ${ANDROID}) option(TERMUX "Set to ON if targeting an Android device with Termux" ${TERMUX}) option(WINLATOR_GLIBC "Set to ON if targeting an Android device with Winlator Glibc" ${WINLATOR_GLIBC}) option(USE_CCACHE "Set to ON to use ccache if present in the system" ${USE_CCACHE}) -option(HAVE_TRACE "Set to ON to have Trace ability (needs ZydisInfo library)" ${HAVE_TRACE}) +option(HAVE_TRACE "Set to ON to have Trace ability (needs libzydis-dev)" ${HAVE_TRACE}) +option(ZYDIS3 "Set to ON if you have trace and an old libzydis v3.x" ${ZYDIS3}) option(SAVE_MEM "Set to ON to build dynarec with some slower memory saving optimizations" ${SAVE_MEM}) option(NOLOADADDR "Set to ON to avoid fixing the load address of Box64" OFF) option(NOGIT "Set to ON if not building from a git clone repo (like when building from a zip download from github)" ${NOGIT}) @@ -294,6 +295,10 @@ if(HAVE_TRACE) add_definitions(-DHAVE_TRACE) endif() +if(ZYDIS3) + add_definitions(-DZYDIS3) +endif() + if(ARM_DYNAREC) add_definitions(-DDYNAREC) add_definitions(-DARM64) diff --git a/docs/COMPILE.md b/docs/COMPILE.md index 14cba09d..050fff31 100644 --- a/docs/COMPILE.md +++ b/docs/COMPILE.md @@ -260,7 +260,7 @@ Add `-DCMAKE_BUILD_TYPE=RelWithDebInfo` option for an optimized build with debug #### Build with trace -To have a trace enabled build (***the interpreter will be slightly slower***), add `-DHAVE_TRACE=1`. You will need the [Zydis library](https://github.com/zyantific/zydis) in your `LD_LIBRARY_PATH` or in the system library folders at runtime to get x86 trace. Use version v3.2.1, as later versions have changed the API and no longer work with box64. +To have a trace enabled build (***the interpreter will be slightly slower***), add `-DHAVE_TRACE=1`. You will need the [Zydis library](https://github.com/zyantific/zydis) devel package installed (`apt install libzydis-dev` on Debian for example). #### Build DynaRec diff --git a/src/emu/x64trace.c b/src/emu/x64trace.c index fb8b205b..7cb6e181 100644 --- a/src/emu/x64trace.c +++ b/src/emu/x64trace.c @@ -5,155 +5,218 @@ #include "debug.h" #include "x64trace.h" #include "box64context.h" -#include "x86zydis.h" #include "x64emu_private.h" +#ifdef HAVE_TRACE +#include <Zydis/Zydis.h> -typedef ZyanStatus (*PFNZydisDecoderInit)(ZydisDecoder* decoder, ZydisMachineMode machine_mode, - ZydisAddressWidth address_width); +/* We cannot use +#if ZYDIS_VERSION_MAJOR(ZYDIS_VERSION) == 4 + +... to check the version, as it's defineed with typecasts, for details, see: https://github.com/zyantific/zydis/pull/577 +*/ + +#ifndef ZYDIS3 // Zydis 4.x +typedef ZyanStatus (*PFNZydisDecoderInit)(ZydisDecoder* decoder, ZydisMachineMode machine_mode, ZydisStackWidth stack_width); typedef ZyanStatus (*PFNZydisFormatterInit)(ZydisFormatter* formatter, ZydisFormatterStyle style); +typedef ZyanStatus (*PFNZydisDecoderDecodeFull)(const ZydisDecoder* decoder, const void* buffer, ZyanUSize length, ZydisDecodedInstruction* instruction, ZydisDecodedOperand* operands); +typedef ZyanStatus (*PFNZydisFormatterFormatInstruction)(const ZydisFormatter* formatter, const ZydisDecodedInstruction* instruction, const ZydisDecodedOperand* operands, ZyanU8 operand_count, char* buffer, ZyanUSize length, ZyanU64 runtime_address, void* user_data); -typedef ZyanStatus (*PFNZydisDecoderDecodeBuffer)(const ZydisDecoder* decoder, - const void* buffer, ZyanUSize length, ZydisDecodedInstruction* instruction); +typedef struct zydis_s { + void* lib; + PFNZydisDecoderInit ZydisDecoderInit; + PFNZydisFormatterInit ZydisFormatterInit; + PFNZydisDecoderDecodeFull ZydisDecoderDecodeFull; + PFNZydisFormatterFormatInstruction ZydisFormatterFormatInstruction; +} zydis_t; -typedef ZyanStatus (*PFNZydisFormatterFormatInstruction)(const ZydisFormatter* formatter, - const ZydisDecodedInstruction* instruction, char* buffer, ZyanUSize length, - ZyanU64 runtime_address); +typedef struct zydis_dec_s { + ZydisDecoder decoder; + ZydisFormatter formatter; + ZydisDecodedInstruction instruction; + ZydisDecodedOperand operands[ZYDIS_MAX_OPERAND_COUNT]; + PFNZydisDecoderDecodeFull ZydisDecoderDecodeFull; + PFNZydisFormatterFormatInstruction ZydisFormatterFormatInstruction; +} zydis_dec_t; + +#else + +typedef ZyanStatus (*PFNZydisDecoderInit)(ZydisDecoder* decoder, ZydisMachineMode machine_mode, ZydisAddressWidth address_width); +typedef ZyanStatus (*PFNZydisFormatterInit)(ZydisFormatter* formatter, ZydisFormatterStyle style); +typedef ZyanStatus (*PFNZydisDecoderDecodeBuffer)(const ZydisDecoder* decoder, const void* buffer, ZyanUSize length, ZydisDecodedInstruction* instruction); +typedef ZyanStatus (*PFNZydisFormatterFormatInstruction)(const ZydisFormatter* formatter, const ZydisDecodedInstruction* instruction, char* buffer, ZyanUSize length, ZyanU64 runtime_address); typedef struct zydis_s { - void* lib; - PFNZydisDecoderInit ZydisDecoderInit; - PFNZydisFormatterInit ZydisFormatterInit; + void* lib; + PFNZydisDecoderInit ZydisDecoderInit; + PFNZydisFormatterInit ZydisFormatterInit; PFNZydisDecoderDecodeBuffer ZydisDecoderDecodeBuffer; PFNZydisFormatterFormatInstruction ZydisFormatterFormatInstruction; } zydis_t; typedef struct zydis_dec_s { - ZydisDecoder decoder; - ZydisFormatter formatter; + ZydisDecoder decoder; + ZydisFormatter formatter; ZydisDecodedInstruction instruction; PFNZydisDecoderDecodeBuffer ZydisDecoderDecodeBuffer; PFNZydisFormatterFormatInstruction ZydisFormatterFormatInstruction; } zydis_dec_t; -int InitX64Trace(box64context_t *context) +#endif + +#else +typedef struct zydis_s { + int dummy; +} zydis_t; + +typedef struct zydis_dec_s { + int dummy; +} zydis_dec_t; +#endif + +int InitX64Trace(box64context_t* context) { - #ifndef HAVE_TRACE +#ifndef HAVE_TRACE return 1; - #else - if(context->zydis) +#else + if (context->zydis) return 0; context->zydis = (zydis_t*)box_calloc(1, sizeof(zydis_t)); - if(!context->zydis) + if (!context->zydis) return 1; context->zydis->lib = dlopen("libZydis.so", RTLD_LAZY); - if(!context->zydis->lib) { + if (!context->zydis->lib) { printf_log(LOG_INFO, "Failed to open libZydis: %s\n", dlerror()); return 1; } - #define GO(f) context->zydis->f = (PFN##f)dlsym(context->zydis->lib, #f);\ - if(!context->zydis->f) {printf_log(LOG_INFO, "Fail to load Zydis function %s\n", #f); dlclose(context->zydis->lib); context->zydis->lib=NULL; return 1;} +#define GO(f) \ + context->zydis->f = (PFN##f)dlsym(context->zydis->lib, #f); \ + if (!context->zydis->f) { \ + printf_log(LOG_INFO, "Fail to load Zydis function %s\n", #f); \ + dlclose(context->zydis->lib); \ + context->zydis->lib = NULL; \ + return 1; \ + } GO(ZydisDecoderInit); GO(ZydisFormatterInit); +#ifndef ZYDIS3 + GO(ZydisDecoderDecodeFull); +#else GO(ZydisDecoderDecodeBuffer); +#endif GO(ZydisFormatterFormatInstruction); - #undef GO +#undef GO context->dec = InitX64TraceDecoder(context); context->dec32 = InitX86TraceDecoder(context); return 0; - #endif +#endif } -void DeleteX64Trace(box64context_t *context) +void DeleteX64Trace(box64context_t* context) { - #ifdef HAVE_TRACE - if(!context->zydis) +#ifdef HAVE_TRACE + if (!context->zydis) return; - if(context->zydis->lib) + if (context->zydis->lib) dlclose(context->zydis->lib); box_free(context->zydis); context->zydis = NULL; - #endif +#endif } -zydis_dec_t* InitX86TraceDecoder(box64context_t *context) +zydis_dec_t* InitX86TraceDecoder(box64context_t* context) { - #ifndef HAVE_TRACE +#ifndef HAVE_TRACE return NULL; - #else - if(!context->zydis) +#else + if (!context->zydis) return NULL; - zydis_dec_t *dec = (zydis_dec_t*)box_calloc(1, sizeof(zydis_dec_t)); + zydis_dec_t* dec = (zydis_dec_t*)box_calloc(1, sizeof(zydis_dec_t)); +#ifndef ZYDIS3 + dec->ZydisDecoderDecodeFull = context->zydis->ZydisDecoderDecodeFull; + dec->ZydisFormatterFormatInstruction = context->zydis->ZydisFormatterFormatInstruction; + context->zydis->ZydisDecoderInit(&dec->decoder, ZYDIS_MACHINE_MODE_LEGACY_32, ZYDIS_STACK_WIDTH_32); + context->zydis->ZydisFormatterInit(&dec->formatter, ZYDIS_FORMATTER_STYLE_INTEL); +#else dec->ZydisDecoderDecodeBuffer = context->zydis->ZydisDecoderDecodeBuffer; dec->ZydisFormatterFormatInstruction = context->zydis->ZydisFormatterFormatInstruction; context->zydis->ZydisDecoderInit(&dec->decoder, ZYDIS_MACHINE_MODE_LEGACY_32, ZYDIS_ADDRESS_WIDTH_32); context->zydis->ZydisFormatterInit(&dec->formatter, ZYDIS_FORMATTER_STYLE_INTEL); - +#endif return dec; - #endif +#endif } -void DeleteX86TraceDecoder(zydis_dec_t **dec) +void DeleteX86TraceDecoder(zydis_dec_t** dec) { - #ifdef HAVE_TRACE +#ifdef HAVE_TRACE box_free(*dec); *dec = NULL; - #endif +#endif } -zydis_dec_t* InitX64TraceDecoder(box64context_t *context) +zydis_dec_t* InitX64TraceDecoder(box64context_t* context) { - #ifndef HAVE_TRACE +#ifndef HAVE_TRACE return NULL; - #else - if(!context->zydis) +#else + if (!context->zydis) return NULL; - zydis_dec_t *dec = (zydis_dec_t*)box_calloc(1, sizeof(zydis_dec_t)); + zydis_dec_t* dec = (zydis_dec_t*)box_calloc(1, sizeof(zydis_dec_t)); +#ifndef ZYDIS3 + dec->ZydisDecoderDecodeFull = context->zydis->ZydisDecoderDecodeFull; + dec->ZydisFormatterFormatInstruction = context->zydis->ZydisFormatterFormatInstruction; + context->zydis->ZydisDecoderInit(&dec->decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64); + context->zydis->ZydisFormatterInit(&dec->formatter, ZYDIS_FORMATTER_STYLE_INTEL); +#else dec->ZydisDecoderDecodeBuffer = context->zydis->ZydisDecoderDecodeBuffer; dec->ZydisFormatterFormatInstruction = context->zydis->ZydisFormatterFormatInstruction; context->zydis->ZydisDecoderInit(&dec->decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_ADDRESS_WIDTH_64); context->zydis->ZydisFormatterInit(&dec->formatter, ZYDIS_FORMATTER_STYLE_INTEL); - +#endif return dec; - #endif +#endif } -void DeleteX64TraceDecoder(zydis_dec_t **dec) +void DeleteX64TraceDecoder(zydis_dec_t** dec) { - #ifdef HAVE_TRACE +#ifdef HAVE_TRACE box_free(*dec); *dec = NULL; - #endif +#endif } const char* DecodeX64Trace(zydis_dec_t* dec, uintptr_t p, int withhex) { - #ifndef HAVE_TRACE +#ifndef HAVE_TRACE return "???"; - #else +#else static char buff[512]; - if(ZYAN_SUCCESS(dec->ZydisDecoderDecodeBuffer(&dec->decoder, (char*)p, 15, - &dec->instruction))) { +#ifndef ZYDIS3 + if (ZYAN_SUCCESS(dec->ZydisDecoderDecodeFull(&dec->decoder, (char*)p, 15, + &dec->instruction, dec->operands))) { +#else + if (ZYAN_SUCCESS(dec->ZydisDecoderDecodeBuffer(&dec->decoder, (char*)p, 15, + &dec->instruction))) { +#endif char tmp[511]; - buff[0]='\0'; + buff[0] = '\0'; if (withhex) { for (int i = 0; i < dec->instruction.length; ++i) { sprintf(tmp, "%02X ", *((unsigned char*)p + i)); strcat(buff, tmp); } } - #if 0 - const /*ZydisFormatterToken*/void* token; - dec->ZydisFormatterTokenizeInstruction(&dec->formatter, &dec->instruction, tmp, sizeof(tmp), p, &token); - dec->PrintTokenizedInstruction(token); - #else - dec->ZydisFormatterFormatInstruction(&dec->formatter, &dec->instruction, tmp, sizeof(tmp),p); - #endif +#ifndef ZYDIS3 + dec->ZydisFormatterFormatInstruction(&dec->formatter, &dec->instruction, dec->operands, dec->instruction.operand_count, tmp, sizeof(tmp), p, ZYAN_NULL); +#else + dec->ZydisFormatterFormatInstruction(&dec->formatter, &dec->instruction, tmp, sizeof(tmp), p); +#endif strcat(buff, tmp); } else { sprintf(buff, "Decoder failed @%p", (void*)p); } return buff; - #endif +#endif } diff --git a/src/emu/x86zydis.h b/src/emu/x86zydis.h deleted file mode 100644 index ec7aea79..00000000 --- a/src/emu/x86zydis.h +++ /dev/null @@ -1,4400 +0,0 @@ -#ifndef _X86_ZYDIS_H_ -#define _X86_ZYDIS_H_ - -#include <stdint.h> - -// Re-create Zydis structures -#define ZYDIS_DECODER_MODE_MAX_VALUE 8 - -typedef uint32_t ZyanStatus; -#define ZYAN_SUCCESS(status) \ - (!((status) & 0x80000000)) -#define ZYAN_FAILED(status) \ - ((status) & 0x80000000) -#define ZYAN_CHECK(status) \ - do \ - { \ - const ZyanStatus status_047620348 = (status); \ - if (!ZYAN_SUCCESS(status_047620348)) \ - { \ - return status_047620348; \ - } \ - } while (0) -/* - * @brief Checks, if the bit at index `b` is required to present the ordinal value `n`. - * - * @param n The ordinal value. - * @param b The bit index. - * - * @return `ZYAN_TRUE`, if the bit at index `b` is required to present the ordinal value `n` or - * `ZYAN_FALSE`, if not. - * - * Note that this macro always returns `ZYAN_FALSE` for `n == 0`. - */ -#define ZYAN_NEEDS_BIT(n, b) (((unsigned long)(n) >> (b)) > 0) -/* - * @brief Returns the number of bits required to represent the ordinal value `n`. - * - * @param n The ordinal value. - * - * @return The number of bits required to represent the ordinal value `n`. - * - * Note that this macro returns `0` for `n == 0`. - */ -#define ZYAN_BITS_TO_REPRESENT(n) \ - ( \ - ZYAN_NEEDS_BIT(n, 0) + ZYAN_NEEDS_BIT(n, 1) + \ - ZYAN_NEEDS_BIT(n, 2) + ZYAN_NEEDS_BIT(n, 3) + \ - ZYAN_NEEDS_BIT(n, 4) + ZYAN_NEEDS_BIT(n, 5) + \ - ZYAN_NEEDS_BIT(n, 6) + ZYAN_NEEDS_BIT(n, 7) + \ - ZYAN_NEEDS_BIT(n, 8) + ZYAN_NEEDS_BIT(n, 9) + \ - ZYAN_NEEDS_BIT(n, 10) + ZYAN_NEEDS_BIT(n, 11) + \ - ZYAN_NEEDS_BIT(n, 12) + ZYAN_NEEDS_BIT(n, 13) + \ - ZYAN_NEEDS_BIT(n, 14) + ZYAN_NEEDS_BIT(n, 15) + \ - ZYAN_NEEDS_BIT(n, 16) + ZYAN_NEEDS_BIT(n, 17) + \ - ZYAN_NEEDS_BIT(n, 18) + ZYAN_NEEDS_BIT(n, 19) + \ - ZYAN_NEEDS_BIT(n, 20) + ZYAN_NEEDS_BIT(n, 21) + \ - ZYAN_NEEDS_BIT(n, 22) + ZYAN_NEEDS_BIT(n, 23) + \ - ZYAN_NEEDS_BIT(n, 24) + ZYAN_NEEDS_BIT(n, 25) + \ - ZYAN_NEEDS_BIT(n, 26) + ZYAN_NEEDS_BIT(n, 27) + \ - ZYAN_NEEDS_BIT(n, 28) + ZYAN_NEEDS_BIT(n, 29) + \ - ZYAN_NEEDS_BIT(n, 30) + ZYAN_NEEDS_BIT(n, 31) \ - ) - -typedef size_t ZyanUSize; -typedef uint8_t ZyanU8; -typedef uint16_t ZyanU16; -typedef uint32_t ZyanU32; -typedef uint64_t ZyanU64; -typedef int32_t ZyanI32; -typedef int64_t ZyanI64; -typedef uint8_t ZyanBool; - -#define ZYDIS_MAX_INSTRUCTION_LENGTH 15 -#define ZYDIS_MAX_OPERAND_COUNT 10 - -struct ZyanAllocator_; - -/** - * @brief Defines the `ZyanAllocatorAllocate` function prototype. - * - * @param allocator A pointer to the `ZyanAllocator` instance. - * @param p Receives a pointer to the first memory block sufficient to hold an - * array of `n` elements with a size of `element_size`. - * @param element_size The size of a single element. - * @param n The number of elements to allocate storage for. - * - * @return A zyan status code. - * - * This prototype is used for the `allocate()` and `reallocate()` functions. - * - * The result of the `reallocate()` function is undefined, if `p` does not point to a memory block - * previously obtained by `(re-)allocate()`. - */ -typedef ZyanStatus (*ZyanAllocatorAllocate)(struct ZyanAllocator_* allocator, void** p, - ZyanUSize element_size, ZyanUSize n); - -/** - * @brief Defines the `ZyanAllocatorDeallocate` function prototype. - * - * @param allocator A pointer to the `ZyanAllocator` instance. - * @param p The pointer obtained from `(re-)allocate()`. - * @param element_size The size of a single element. - * @param n The number of elements earlier passed to `(re-)allocate()`. - * - * @return A zyan status code. - */ -typedef ZyanStatus (*ZyanAllocatorDeallocate)(struct ZyanAllocator_* allocator, void* p, - ZyanUSize element_size, ZyanUSize n); - -/** - * @brief Defines the `ZyanAllocator` struct. - * - * This is the base class for all custom allocator implementations. - * - * All fields in this struct should be considered as "private". Any changes may lead to unexpected - * behavior. - */ -typedef struct ZyanAllocator_ -{ - /** - * @brief The allocate function. - */ - ZyanAllocatorAllocate allocate; - /** - * @brief The reallocate function. - */ - ZyanAllocatorAllocate reallocate; - /** - * @brief The deallocate function. - */ - ZyanAllocatorDeallocate deallocate; -} ZyanAllocator; - -typedef struct ZyanVector_ -{ - /** - * @brief The memory allocator. - */ - ZyanAllocator* allocator; - /** - * @brief The growth factor. - */ - float growth_factor; - /** - * @brief The shrink threshold. - */ - float shrink_threshold; - /** - * @brief The current number of elements in the vector. - */ - ZyanUSize size; - /** - * @brief The maximum capacity (number of elements). - */ - ZyanUSize capacity; - /** - * @brief The size of a single element in bytes. - */ - ZyanUSize element_size; - /** - * @brief The data pointer. - */ - void* data; -} ZyanVector; -typedef ZyanU8 ZyanStringFlags; -/** - * @brief Defines the `ZyanString` struct. - * - * The `ZyanString` type is implemented as a size-prefixed string - which allows for a lot of - * performance optimizations. - * Nevertheless null-termination is guaranteed at all times to provide maximum compatibility with - * default C-style strings (use `ZyanStringGetData` to access the C-style string). - * - * All fields in this struct should be considered as "private". Any changes may lead to unexpected - * behavior. - */ -typedef struct ZyanString_ -{ - /** - * @brief String flags. - */ - ZyanStringFlags flags; - /** - * @brief The vector that contains the actual string. - */ - ZyanVector vector; -} ZyanString; - -/* ---------------------------------------------------------------------------------------------- */ -/* View */ -/* ---------------------------------------------------------------------------------------------- */ - -/** - * @brief Defines the `ZyanStringView` struct. - * - * The `ZyanStringView` type provides a view inside a string (`ZyanString` instances, null- - * terminated C-style strings, or even not-null-terminated custom strings). A view is immutable - * by design and can't be directly converted to a C-style string. - * - * Views might become invalid (e.g. pointing to invalid memory), if the underlying string gets - * destroyed or resized. - * - * The `ZYAN_STRING_TO_VIEW` macro can be used to cast a `ZyanString` to a `ZyanStringView` pointer - * without any runtime overhead. - * Casting a view to a normal string is not supported and will lead to unexpected behavior (use - * `ZyanStringDuplicate` to create a deep-copy instead). - * - * All fields in this struct should be considered as "private". Any changes may lead to unexpected - * behavior. - */ -typedef struct ZyanStringView_ -{ - /** - * @brief The string data. - * - * The view internally re-uses the normal string struct to allow casts without any runtime - * overhead. - */ - ZyanString string; -} ZyanStringView; - -typedef enum ZydisMachineMode_ -{ - /** - * @brief 64 bit mode. - */ - ZYDIS_MACHINE_MODE_LONG_64, - /** - * @brief 32 bit protected mode. - */ - ZYDIS_MACHINE_MODE_LONG_COMPAT_32, - /** - * @brief 16 bit protected mode. - */ - ZYDIS_MACHINE_MODE_LONG_COMPAT_16, - /** - * @brief 32 bit protected mode. - */ - ZYDIS_MACHINE_MODE_LEGACY_32, - /** - * @brief 16 bit protected mode. - */ - ZYDIS_MACHINE_MODE_LEGACY_16, - /** - * @brief 16 bit real mode. - */ - ZYDIS_MACHINE_MODE_REAL_16, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_MACHINE_MODE_MAX_VALUE = ZYDIS_MACHINE_MODE_REAL_16, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_MACHINE_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_MACHINE_MODE_MAX_VALUE) -} ZydisMachineMode; - -typedef enum ZydisAddressWidth_ -{ - ZYDIS_ADDRESS_WIDTH_16, - ZYDIS_ADDRESS_WIDTH_32, - ZYDIS_ADDRESS_WIDTH_64, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_ADDRESS_WIDTH_MAX_VALUE = ZYDIS_ADDRESS_WIDTH_64, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_ADDRESS_WIDTH_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_ADDRESS_WIDTH_MAX_VALUE) -} ZydisAddressWidth; - -typedef struct ZydisDecoder_ -{ - /** - * @brief The machine mode. - */ - ZydisMachineMode machine_mode; - /** - * @brief The address width. - */ - ZydisAddressWidth address_width; - /** - * @brief The decoder mode array. - */ - uint8_t decoder_mode[ZYDIS_DECODER_MODE_MAX_VALUE + 1]; -} ZydisDecoder; - -typedef enum ZydisFormatterStyle_ -{ - /** - * @brief Generates `AT&T`-style disassembly. - */ - ZYDIS_FORMATTER_STYLE_ATT, - /** - * @brief Generates `Intel`-style disassembly. - */ - ZYDIS_FORMATTER_STYLE_INTEL, - /** - * @brief Generates `MASM`-style disassembly that is directly accepted as input for the - * `MASM` assembler. - * - * The runtime-address is ignored in this mode. - */ - ZYDIS_FORMATTER_STYLE_INTEL_MASM, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_FORMATTER_STYLE_MAX_VALUE = ZYDIS_FORMATTER_STYLE_INTEL_MASM, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_FORMATTER_STYLE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_FORMATTER_STYLE_MAX_VALUE) -} ZydisFormatterStyle; - -/** - * @brief Defines the `ZydisRegister` enum. - */ -typedef enum ZydisRegister_ -{ - ZYDIS_REGISTER_NONE, - - // General purpose registers 8-bit - ZYDIS_REGISTER_AL, - ZYDIS_REGISTER_CL, - ZYDIS_REGISTER_DL, - ZYDIS_REGISTER_BL, - ZYDIS_REGISTER_AH, - ZYDIS_REGISTER_CH, - ZYDIS_REGISTER_DH, - ZYDIS_REGISTER_BH, - ZYDIS_REGISTER_SPL, - ZYDIS_REGISTER_BPL, - ZYDIS_REGISTER_SIL, - ZYDIS_REGISTER_DIL, - ZYDIS_REGISTER_R8B, - ZYDIS_REGISTER_R9B, - ZYDIS_REGISTER_R10B, - ZYDIS_REGISTER_R11B, - ZYDIS_REGISTER_R12B, - ZYDIS_REGISTER_R13B, - ZYDIS_REGISTER_R14B, - ZYDIS_REGISTER_R15B, - // General purpose registers 16-bit - ZYDIS_REGISTER_AX, - ZYDIS_REGISTER_CX, - ZYDIS_REGISTER_DX, - ZYDIS_REGISTER_BX, - ZYDIS_REGISTER_SP, - ZYDIS_REGISTER_BP, - ZYDIS_REGISTER_SI, - ZYDIS_REGISTER_DI, - ZYDIS_REGISTER_R8W, - ZYDIS_REGISTER_R9W, - ZYDIS_REGISTER_R10W, - ZYDIS_REGISTER_R11W, - ZYDIS_REGISTER_R12W, - ZYDIS_REGISTER_R13W, - ZYDIS_REGISTER_R14W, - ZYDIS_REGISTER_R15W, - // General purpose registers 32-bit - ZYDIS_REGISTER_EAX, - ZYDIS_REGISTER_ECX, - ZYDIS_REGISTER_EDX, - ZYDIS_REGISTER_EBX, - ZYDIS_REGISTER_ESP, - ZYDIS_REGISTER_EBP, - ZYDIS_REGISTER_ESI, - ZYDIS_REGISTER_EDI, - ZYDIS_REGISTER_R8D, - ZYDIS_REGISTER_R9D, - ZYDIS_REGISTER_R10D, - ZYDIS_REGISTER_R11D, - ZYDIS_REGISTER_R12D, - ZYDIS_REGISTER_R13D, - ZYDIS_REGISTER_R14D, - ZYDIS_REGISTER_R15D, - // General purpose registers 64-bit - ZYDIS_REGISTER_RAX, - ZYDIS_REGISTER_RCX, - ZYDIS_REGISTER_RDX, - ZYDIS_REGISTER_RBX, - ZYDIS_REGISTER_RSP, - ZYDIS_REGISTER_RBP, - ZYDIS_REGISTER_RSI, - ZYDIS_REGISTER_RDI, - ZYDIS_REGISTER_R8, - ZYDIS_REGISTER_R9, - ZYDIS_REGISTER_R10, - ZYDIS_REGISTER_R11, - ZYDIS_REGISTER_R12, - ZYDIS_REGISTER_R13, - ZYDIS_REGISTER_R14, - ZYDIS_REGISTER_R15, - // Floating point legacy registers - ZYDIS_REGISTER_ST0, - ZYDIS_REGISTER_ST1, - ZYDIS_REGISTER_ST2, - ZYDIS_REGISTER_ST3, - ZYDIS_REGISTER_ST4, - ZYDIS_REGISTER_ST5, - ZYDIS_REGISTER_ST6, - ZYDIS_REGISTER_ST7, - ZYDIS_REGISTER_X87CONTROL, - ZYDIS_REGISTER_X87STATUS, - ZYDIS_REGISTER_X87TAG, - // Floating point multimedia registers - ZYDIS_REGISTER_MM0, - ZYDIS_REGISTER_MM1, - ZYDIS_REGISTER_MM2, - ZYDIS_REGISTER_MM3, - ZYDIS_REGISTER_MM4, - ZYDIS_REGISTER_MM5, - ZYDIS_REGISTER_MM6, - ZYDIS_REGISTER_MM7, - // Floating point vector registers 128-bit - ZYDIS_REGISTER_XMM0, - ZYDIS_REGISTER_XMM1, - ZYDIS_REGISTER_XMM2, - ZYDIS_REGISTER_XMM3, - ZYDIS_REGISTER_XMM4, - ZYDIS_REGISTER_XMM5, - ZYDIS_REGISTER_XMM6, - ZYDIS_REGISTER_XMM7, - ZYDIS_REGISTER_XMM8, - ZYDIS_REGISTER_XMM9, - ZYDIS_REGISTER_XMM10, - ZYDIS_REGISTER_XMM11, - ZYDIS_REGISTER_XMM12, - ZYDIS_REGISTER_XMM13, - ZYDIS_REGISTER_XMM14, - ZYDIS_REGISTER_XMM15, - ZYDIS_REGISTER_XMM16, - ZYDIS_REGISTER_XMM17, - ZYDIS_REGISTER_XMM18, - ZYDIS_REGISTER_XMM19, - ZYDIS_REGISTER_XMM20, - ZYDIS_REGISTER_XMM21, - ZYDIS_REGISTER_XMM22, - ZYDIS_REGISTER_XMM23, - ZYDIS_REGISTER_XMM24, - ZYDIS_REGISTER_XMM25, - ZYDIS_REGISTER_XMM26, - ZYDIS_REGISTER_XMM27, - ZYDIS_REGISTER_XMM28, - ZYDIS_REGISTER_XMM29, - ZYDIS_REGISTER_XMM30, - ZYDIS_REGISTER_XMM31, - // Floating point vector registers 256-bit - ZYDIS_REGISTER_YMM0, - ZYDIS_REGISTER_YMM1, - ZYDIS_REGISTER_YMM2, - ZYDIS_REGISTER_YMM3, - ZYDIS_REGISTER_YMM4, - ZYDIS_REGISTER_YMM5, - ZYDIS_REGISTER_YMM6, - ZYDIS_REGISTER_YMM7, - ZYDIS_REGISTER_YMM8, - ZYDIS_REGISTER_YMM9, - ZYDIS_REGISTER_YMM10, - ZYDIS_REGISTER_YMM11, - ZYDIS_REGISTER_YMM12, - ZYDIS_REGISTER_YMM13, - ZYDIS_REGISTER_YMM14, - ZYDIS_REGISTER_YMM15, - ZYDIS_REGISTER_YMM16, - ZYDIS_REGISTER_YMM17, - ZYDIS_REGISTER_YMM18, - ZYDIS_REGISTER_YMM19, - ZYDIS_REGISTER_YMM20, - ZYDIS_REGISTER_YMM21, - ZYDIS_REGISTER_YMM22, - ZYDIS_REGISTER_YMM23, - ZYDIS_REGISTER_YMM24, - ZYDIS_REGISTER_YMM25, - ZYDIS_REGISTER_YMM26, - ZYDIS_REGISTER_YMM27, - ZYDIS_REGISTER_YMM28, - ZYDIS_REGISTER_YMM29, - ZYDIS_REGISTER_YMM30, - ZYDIS_REGISTER_YMM31, - // Floating point vector registers 512-bit - ZYDIS_REGISTER_ZMM0, - ZYDIS_REGISTER_ZMM1, - ZYDIS_REGISTER_ZMM2, - ZYDIS_REGISTER_ZMM3, - ZYDIS_REGISTER_ZMM4, - ZYDIS_REGISTER_ZMM5, - ZYDIS_REGISTER_ZMM6, - ZYDIS_REGISTER_ZMM7, - ZYDIS_REGISTER_ZMM8, - ZYDIS_REGISTER_ZMM9, - ZYDIS_REGISTER_ZMM10, - ZYDIS_REGISTER_ZMM11, - ZYDIS_REGISTER_ZMM12, - ZYDIS_REGISTER_ZMM13, - ZYDIS_REGISTER_ZMM14, - ZYDIS_REGISTER_ZMM15, - ZYDIS_REGISTER_ZMM16, - ZYDIS_REGISTER_ZMM17, - ZYDIS_REGISTER_ZMM18, - ZYDIS_REGISTER_ZMM19, - ZYDIS_REGISTER_ZMM20, - ZYDIS_REGISTER_ZMM21, - ZYDIS_REGISTER_ZMM22, - ZYDIS_REGISTER_ZMM23, - ZYDIS_REGISTER_ZMM24, - ZYDIS_REGISTER_ZMM25, - ZYDIS_REGISTER_ZMM26, - ZYDIS_REGISTER_ZMM27, - ZYDIS_REGISTER_ZMM28, - ZYDIS_REGISTER_ZMM29, - ZYDIS_REGISTER_ZMM30, - ZYDIS_REGISTER_ZMM31, - // Flags registers - ZYDIS_REGISTER_FLAGS, - ZYDIS_REGISTER_EFLAGS, - ZYDIS_REGISTER_RFLAGS, - // Instruction-pointer registers - ZYDIS_REGISTER_IP, - ZYDIS_REGISTER_EIP, - ZYDIS_REGISTER_RIP, - // Segment registers - ZYDIS_REGISTER_ES, - ZYDIS_REGISTER_CS, - ZYDIS_REGISTER_SS, - ZYDIS_REGISTER_DS, - ZYDIS_REGISTER_FS, - ZYDIS_REGISTER_GS, - // Table registers - ZYDIS_REGISTER_GDTR, - ZYDIS_REGISTER_LDTR, - ZYDIS_REGISTER_IDTR, - ZYDIS_REGISTER_TR, - // Test registers - ZYDIS_REGISTER_TR0, - ZYDIS_REGISTER_TR1, - ZYDIS_REGISTER_TR2, - ZYDIS_REGISTER_TR3, - ZYDIS_REGISTER_TR4, - ZYDIS_REGISTER_TR5, - ZYDIS_REGISTER_TR6, - ZYDIS_REGISTER_TR7, - // Control registers - ZYDIS_REGISTER_CR0, - ZYDIS_REGISTER_CR1, - ZYDIS_REGISTER_CR2, - ZYDIS_REGISTER_CR3, - ZYDIS_REGISTER_CR4, - ZYDIS_REGISTER_CR5, - ZYDIS_REGISTER_CR6, - ZYDIS_REGISTER_CR7, - ZYDIS_REGISTER_CR8, - ZYDIS_REGISTER_CR9, - ZYDIS_REGISTER_CR10, - ZYDIS_REGISTER_CR11, - ZYDIS_REGISTER_CR12, - ZYDIS_REGISTER_CR13, - ZYDIS_REGISTER_CR14, - ZYDIS_REGISTER_CR15, - // Debug registers - ZYDIS_REGISTER_DR0, - ZYDIS_REGISTER_DR1, - ZYDIS_REGISTER_DR2, - ZYDIS_REGISTER_DR3, - ZYDIS_REGISTER_DR4, - ZYDIS_REGISTER_DR5, - ZYDIS_REGISTER_DR6, - ZYDIS_REGISTER_DR7, - ZYDIS_REGISTER_DR8, - ZYDIS_REGISTER_DR9, - ZYDIS_REGISTER_DR10, - ZYDIS_REGISTER_DR11, - ZYDIS_REGISTER_DR12, - ZYDIS_REGISTER_DR13, - ZYDIS_REGISTER_DR14, - ZYDIS_REGISTER_DR15, - // Mask registers - ZYDIS_REGISTER_K0, - ZYDIS_REGISTER_K1, - ZYDIS_REGISTER_K2, - ZYDIS_REGISTER_K3, - ZYDIS_REGISTER_K4, - ZYDIS_REGISTER_K5, - ZYDIS_REGISTER_K6, - ZYDIS_REGISTER_K7, - // Bound registers - ZYDIS_REGISTER_BND0, - ZYDIS_REGISTER_BND1, - ZYDIS_REGISTER_BND2, - ZYDIS_REGISTER_BND3, - ZYDIS_REGISTER_BNDCFG, - ZYDIS_REGISTER_BNDSTATUS, - // Uncategorized - ZYDIS_REGISTER_MXCSR, - ZYDIS_REGISTER_PKRU, - ZYDIS_REGISTER_XCR0, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_REGISTER_MAX_VALUE = ZYDIS_REGISTER_XCR0, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_REGISTER_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_REGISTER_MAX_VALUE) -} ZydisRegister; - -typedef enum ZydisNumericBase_ -{ - /** - * @brief Decimal system. - */ - ZYDIS_NUMERIC_BASE_DEC, - /** - * @brief Hexadecimal system. - */ - ZYDIS_NUMERIC_BASE_HEX, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_NUMERIC_BASE_MAX_VALUE = ZYDIS_NUMERIC_BASE_HEX, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_NUMERIC_BASE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_NUMERIC_BASE_MAX_VALUE) -} ZydisNumericBase; - -/** - * @brief Defines the `ZydisSignedness` enum. - */ -typedef enum ZydisSignedness_ -{ - /** - * @brief Automatically choose the most suitable mode based on the operands - * `ZydisDecodedOperand.imm.is_signed` attribute. - */ - ZYDIS_SIGNEDNESS_AUTO, - /** - * @brief Force signed values. - */ - ZYDIS_SIGNEDNESS_SIGNED, - /** - * @brief Force unsigned values. - */ - ZYDIS_SIGNEDNESS_UNSIGNED, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_SIGNEDNESS_MAX_VALUE = ZYDIS_SIGNEDNESS_UNSIGNED, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_SIGNEDNESS_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_SIGNEDNESS_MAX_VALUE) -} ZydisSignedness; -/** - * @brief Defines the `ZydisDecorator` enum. - */ -typedef enum ZydisDecorator_ -{ - ZYDIS_DECORATOR_INVALID, - /** - * @brief The embedded-mask decorator. - */ - ZYDIS_DECORATOR_MASK, - /** - * @brief The broadcast decorator. - */ - ZYDIS_DECORATOR_BC, - /** - * @brief The rounding-control decorator. - */ - ZYDIS_DECORATOR_RC, - /** - * @brief The suppress-all-exceptions decorator. - */ - ZYDIS_DECORATOR_SAE, - /** - * @brief The register-swizzle decorator. - */ - ZYDIS_DECORATOR_SWIZZLE, - /** - * @brief The conversion decorator. - */ - ZYDIS_DECORATOR_CONVERSION, - /** - * @brief The eviction-hint decorator. - */ - ZYDIS_DECORATOR_EH, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_DECORATOR_MAX_VALUE = ZYDIS_DECORATOR_EH, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_DECORATOR_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_DECORATOR_MAX_VALUE) -} ZydisDecorator; -/** - * @brief Defines the `ZydisPadding` enum. - */ -typedef enum ZydisPadding_ -{ - /** - * @brief Disables padding. - */ - ZYDIS_PADDING_DISABLED = 0, - /** - * @brief Padds the value to the current stack-width for addresses, or to the operand-width - * for immediate values (hexadecimal only). - */ - ZYDIS_PADDING_AUTO = (-1), - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_PADDING_MAX_VALUE = ZYDIS_PADDING_AUTO, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_PADDING_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_PADDING_MAX_VALUE) -} ZydisPadding; - -typedef struct ZydisFormatter_ ZydisFormatter; -typedef struct ZydisFormatterBuffer_ ZydisFormatterBuffer; -typedef struct ZydisFormatterContext_ ZydisFormatterContext; - -typedef ZyanStatus (*ZydisFormatterFunc)(const ZydisFormatter* formatter, - ZydisFormatterBuffer* buffer, ZydisFormatterContext* context); -typedef ZyanStatus (*ZydisFormatterRegisterFunc)(const ZydisFormatter* formatter, - ZydisFormatterBuffer* buffer, ZydisFormatterContext* context, ZydisRegister reg); -typedef ZyanStatus (*ZydisFormatterDecoratorFunc)(const ZydisFormatter* formatter, - ZydisFormatterBuffer* buffer, ZydisFormatterContext* context, ZydisDecorator decorator); - -typedef struct ZydisFormatter_ -{ - /** - * @brief The formatter style. - */ - ZydisFormatterStyle style; - /** - * @brief The `ZYDIS_FORMATTER_PROP_FORCE_SIZE` property. - */ - uint8_t force_memory_size; - /** - * @brief The `ZYDIS_FORMATTER_PROP_FORCE_SEGMENT` property. - */ - uint8_t force_memory_segment; - /** - * @brief The `ZYDIS_FORMATTER_PROP_FORCE_RELATIVE_BRANCHES` property. - */ - uint8_t force_relative_branches; - /** - * @brief The `ZYDIS_FORMATTER_PROP_FORCE_RELATIVE_RIPREL` property. - */ - uint8_t force_relative_riprel; - /** - * @brief The `ZYDIS_FORMATTER_PROP_PRINT_BRANCH_SIZE` property. - */ - uint8_t print_branch_size; - /** - * @brief The `ZYDIS_FORMATTER_DETAILED_PREFIXES` property. - */ - uint8_t detailed_prefixes; - /** - * @brief The `ZYDIS_FORMATTER_ADDR_BASE` property. - */ - ZydisNumericBase addr_base; - /** - * @brief The `ZYDIS_FORMATTER_ADDR_SIGNEDNESS` property. - */ - ZydisSignedness addr_signedness; - /** - * @brief The `ZYDIS_FORMATTER_ADDR_PADDING_ABSOLUTE` property. - */ - ZydisPadding addr_padding_absolute; - /** - * @brief The `ZYDIS_FORMATTER_ADDR_PADDING_RELATIVE` property. - */ - ZydisPadding addr_padding_relative; - /** - * @brief The `ZYDIS_FORMATTER_DISP_BASE` property. - */ - ZydisNumericBase disp_base; - /** - * @brief The `ZYDIS_FORMATTER_DISP_SIGNEDNESS` property. - */ - ZydisSignedness disp_signedness; - /** - * @brief The `ZYDIS_FORMATTER_DISP_PADDING` property. - */ - ZydisPadding disp_padding; - /** - * @brief The `ZYDIS_FORMATTER_IMM_BASE` property. - */ - ZydisNumericBase imm_base; - /** - * @brief The `ZYDIS_FORMATTER_IMM_SIGNEDNESS` property. - */ - ZydisSignedness imm_signedness; - /** - * @brief The `ZYDIS_FORMATTER_IMM_PADDING` property. - */ - ZydisPadding imm_padding; - /** - * @brief The `ZYDIS_FORMATTER_UPPERCASE_PREFIXES` property. - */ - int32_t case_prefixes; - /** - * @brief The `ZYDIS_FORMATTER_UPPERCASE_MNEMONIC` property. - */ - int32_t case_mnemonic; - /** - * @brief The `ZYDIS_FORMATTER_UPPERCASE_REGISTERS` property. - */ - int32_t case_registers; - /** - * @brief The `ZYDIS_FORMATTER_UPPERCASE_TYPECASTS` property. - */ - int32_t case_typecasts; - /** - * @brief The `ZYDIS_FORMATTER_UPPERCASE_DECORATORS` property. - */ - int32_t case_decorators; - /** - * @brief The `ZYDIS_FORMATTER_HEX_UPPERCASE` property. - */ - uint8_t hex_uppercase; - /** - * @brief The number formats for all numeric bases. - * - * Index 0 = prefix - * Index 1 = suffix - */ - struct - { - /** - * @brief A pointer to the `ZyanStringView` to use as prefix/suffix. - */ - const ZyanStringView* string; - /** - * @brief The `ZyanStringView` to use as prefix/suffix - */ - ZyanStringView string_data; - /** - * @brief The actual string data. - */ - char buffer[11]; - } number_format[ZYDIS_NUMERIC_BASE_MAX_VALUE + 1][2]; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRE_INSTRUCTION` function. - */ - ZydisFormatterFunc func_pre_instruction; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_POST_INSTRUCTION` function. - */ - ZydisFormatterFunc func_post_instruction; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_FORMAT_INSTRUCTION` function. - */ - ZydisFormatterFunc func_format_instruction; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRE_OPERAND` function. - */ - ZydisFormatterFunc func_pre_operand; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_POST_OPERAND` function. - */ - ZydisFormatterFunc func_post_operand; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_REG` function. - */ - ZydisFormatterFunc func_format_operand_reg; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_MEM` function. - */ - ZydisFormatterFunc func_format_operand_mem; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_PTR` function. - */ - ZydisFormatterFunc func_format_operand_ptr; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_IMM` function. - */ - ZydisFormatterFunc func_format_operand_imm; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_MNEMONIC function. - */ - ZydisFormatterFunc func_print_mnemonic; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_REGISTER` function. - */ - ZydisFormatterRegisterFunc func_print_register; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_ADDRESS_ABS` function. - */ - ZydisFormatterFunc func_print_address_abs; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_ADDRESS_REL` function. - */ - ZydisFormatterFunc func_print_address_rel; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_DISP` function. - */ - ZydisFormatterFunc func_print_disp; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_IMM` function. - */ - ZydisFormatterFunc func_print_imm; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_TYPECAST` function. - */ - ZydisFormatterFunc func_print_typecast; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_SEGMENT` function. - */ - ZydisFormatterFunc func_print_segment; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_PREFIXES` function. - */ - ZydisFormatterFunc func_print_prefixes; - /** - * @brief The `ZYDIS_FORMATTER_FUNC_PRINT_DECORATOR` function. - */ - ZydisFormatterDecoratorFunc func_print_decorator; - - // ummy padding, in case the structure growth... - uint32_t padding[20]; -} ZydisFormatter; - -/** - * @brief Defines the `ZydisMnemonic` enum. - */ -typedef enum ZydisMnemonic_ -{ - ZYDIS_MNEMONIC_INVALID, - ZYDIS_MNEMONIC_AAA, - ZYDIS_MNEMONIC_AAD, - ZYDIS_MNEMONIC_AAM, - ZYDIS_MNEMONIC_AAS, - ZYDIS_MNEMONIC_ADC, - ZYDIS_MNEMONIC_ADCX, - ZYDIS_MNEMONIC_ADD, - ZYDIS_MNEMONIC_ADDPD, - ZYDIS_MNEMONIC_ADDPS, - ZYDIS_MNEMONIC_ADDSD, - ZYDIS_MNEMONIC_ADDSS, - ZYDIS_MNEMONIC_ADDSUBPD, - ZYDIS_MNEMONIC_ADDSUBPS, - ZYDIS_MNEMONIC_ADOX, - ZYDIS_MNEMONIC_AESDEC, - ZYDIS_MNEMONIC_AESDECLAST, - ZYDIS_MNEMONIC_AESENC, - ZYDIS_MNEMONIC_AESENCLAST, - ZYDIS_MNEMONIC_AESIMC, - ZYDIS_MNEMONIC_AESKEYGENASSIST, - ZYDIS_MNEMONIC_AND, - ZYDIS_MNEMONIC_ANDN, - ZYDIS_MNEMONIC_ANDNPD, - ZYDIS_MNEMONIC_ANDNPS, - ZYDIS_MNEMONIC_ANDPD, - ZYDIS_MNEMONIC_ANDPS, - ZYDIS_MNEMONIC_ARPL, - ZYDIS_MNEMONIC_BEXTR, - ZYDIS_MNEMONIC_BLCFILL, - ZYDIS_MNEMONIC_BLCI, - ZYDIS_MNEMONIC_BLCIC, - ZYDIS_MNEMONIC_BLCMSK, - ZYDIS_MNEMONIC_BLCS, - ZYDIS_MNEMONIC_BLENDPD, - ZYDIS_MNEMONIC_BLENDPS, - ZYDIS_MNEMONIC_BLENDVPD, - ZYDIS_MNEMONIC_BLENDVPS, - ZYDIS_MNEMONIC_BLSFILL, - ZYDIS_MNEMONIC_BLSI, - ZYDIS_MNEMONIC_BLSIC, - ZYDIS_MNEMONIC_BLSMSK, - ZYDIS_MNEMONIC_BLSR, - ZYDIS_MNEMONIC_BNDCL, - ZYDIS_MNEMONIC_BNDCN, - ZYDIS_MNEMONIC_BNDCU, - ZYDIS_MNEMONIC_BNDLDX, - ZYDIS_MNEMONIC_BNDMK, - ZYDIS_MNEMONIC_BNDMOV, - ZYDIS_MNEMONIC_BNDSTX, - ZYDIS_MNEMONIC_BOUND, - ZYDIS_MNEMONIC_BSF, - ZYDIS_MNEMONIC_BSR, - ZYDIS_MNEMONIC_BSWAP, - ZYDIS_MNEMONIC_BT, - ZYDIS_MNEMONIC_BTC, - ZYDIS_MNEMONIC_BTR, - ZYDIS_MNEMONIC_BTS, - ZYDIS_MNEMONIC_BZHI, - ZYDIS_MNEMONIC_CALL, - ZYDIS_MNEMONIC_CBW, - ZYDIS_MNEMONIC_CDQ, - ZYDIS_MNEMONIC_CDQE, - ZYDIS_MNEMONIC_CLAC, - ZYDIS_MNEMONIC_CLC, - ZYDIS_MNEMONIC_CLD, - ZYDIS_MNEMONIC_CLDEMOTE, - ZYDIS_MNEMONIC_CLEVICT0, - ZYDIS_MNEMONIC_CLEVICT1, - ZYDIS_MNEMONIC_CLFLUSH, - ZYDIS_MNEMONIC_CLFLUSHOPT, - ZYDIS_MNEMONIC_CLGI, - ZYDIS_MNEMONIC_CLI, - ZYDIS_MNEMONIC_CLRSSBSY, - ZYDIS_MNEMONIC_CLTS, - ZYDIS_MNEMONIC_CLWB, - ZYDIS_MNEMONIC_CLZERO, - ZYDIS_MNEMONIC_CMC, - ZYDIS_MNEMONIC_CMOVB, - ZYDIS_MNEMONIC_CMOVBE, - ZYDIS_MNEMONIC_CMOVL, - ZYDIS_MNEMONIC_CMOVLE, - ZYDIS_MNEMONIC_CMOVNB, - ZYDIS_MNEMONIC_CMOVNBE, - ZYDIS_MNEMONIC_CMOVNL, - ZYDIS_MNEMONIC_CMOVNLE, - ZYDIS_MNEMONIC_CMOVNO, - ZYDIS_MNEMONIC_CMOVNP, - ZYDIS_MNEMONIC_CMOVNS, - ZYDIS_MNEMONIC_CMOVNZ, - ZYDIS_MNEMONIC_CMOVO, - ZYDIS_MNEMONIC_CMOVP, - ZYDIS_MNEMONIC_CMOVS, - ZYDIS_MNEMONIC_CMOVZ, - ZYDIS_MNEMONIC_CMP, - ZYDIS_MNEMONIC_CMPPD, - ZYDIS_MNEMONIC_CMPPS, - ZYDIS_MNEMONIC_CMPSB, - ZYDIS_MNEMONIC_CMPSD, - ZYDIS_MNEMONIC_CMPSQ, - ZYDIS_MNEMONIC_CMPSS, - ZYDIS_MNEMONIC_CMPSW, - ZYDIS_MNEMONIC_CMPXCHG, - ZYDIS_MNEMONIC_CMPXCHG16B, - ZYDIS_MNEMONIC_CMPXCHG8B, - ZYDIS_MNEMONIC_COMISD, - ZYDIS_MNEMONIC_COMISS, - ZYDIS_MNEMONIC_CPUID, - ZYDIS_MNEMONIC_CQO, - ZYDIS_MNEMONIC_CRC32, - ZYDIS_MNEMONIC_CVTDQ2PD, - ZYDIS_MNEMONIC_CVTDQ2PS, - ZYDIS_MNEMONIC_CVTPD2DQ, - ZYDIS_MNEMONIC_CVTPD2PI, - ZYDIS_MNEMONIC_CVTPD2PS, - ZYDIS_MNEMONIC_CVTPI2PD, - ZYDIS_MNEMONIC_CVTPI2PS, - ZYDIS_MNEMONIC_CVTPS2DQ, - ZYDIS_MNEMONIC_CVTPS2PD, - ZYDIS_MNEMONIC_CVTPS2PI, - ZYDIS_MNEMONIC_CVTSD2SI, - ZYDIS_MNEMONIC_CVTSD2SS, - ZYDIS_MNEMONIC_CVTSI2SD, - ZYDIS_MNEMONIC_CVTSI2SS, - ZYDIS_MNEMONIC_CVTSS2SD, - ZYDIS_MNEMONIC_CVTSS2SI, - ZYDIS_MNEMONIC_CVTTPD2DQ, - ZYDIS_MNEMONIC_CVTTPD2PI, - ZYDIS_MNEMONIC_CVTTPS2DQ, - ZYDIS_MNEMONIC_CVTTPS2PI, - ZYDIS_MNEMONIC_CVTTSD2SI, - ZYDIS_MNEMONIC_CVTTSS2SI, - ZYDIS_MNEMONIC_CWD, - ZYDIS_MNEMONIC_CWDE, - ZYDIS_MNEMONIC_DAA, - ZYDIS_MNEMONIC_DAS, - ZYDIS_MNEMONIC_DEC, - ZYDIS_MNEMONIC_DELAY, - ZYDIS_MNEMONIC_DIV, - ZYDIS_MNEMONIC_DIVPD, - ZYDIS_MNEMONIC_DIVPS, - ZYDIS_MNEMONIC_DIVSD, - ZYDIS_MNEMONIC_DIVSS, - ZYDIS_MNEMONIC_DPPD, - ZYDIS_MNEMONIC_DPPS, - ZYDIS_MNEMONIC_EMMS, - ZYDIS_MNEMONIC_ENCLS, - ZYDIS_MNEMONIC_ENCLU, - ZYDIS_MNEMONIC_ENCLV, - ZYDIS_MNEMONIC_ENDBR32, - ZYDIS_MNEMONIC_ENDBR64, - ZYDIS_MNEMONIC_ENTER, - ZYDIS_MNEMONIC_EXTRACTPS, - ZYDIS_MNEMONIC_EXTRQ, - ZYDIS_MNEMONIC_F2XM1, - ZYDIS_MNEMONIC_FABS, - ZYDIS_MNEMONIC_FADD, - ZYDIS_MNEMONIC_FADDP, - ZYDIS_MNEMONIC_FBLD, - ZYDIS_MNEMONIC_FBSTP, - ZYDIS_MNEMONIC_FCHS, - ZYDIS_MNEMONIC_FCMOVB, - ZYDIS_MNEMONIC_FCMOVBE, - ZYDIS_MNEMONIC_FCMOVE, - ZYDIS_MNEMONIC_FCMOVNB, - ZYDIS_MNEMONIC_FCMOVNBE, - ZYDIS_MNEMONIC_FCMOVNE, - ZYDIS_MNEMONIC_FCMOVNU, - ZYDIS_MNEMONIC_FCMOVU, - ZYDIS_MNEMONIC_FCOM, - ZYDIS_MNEMONIC_FCOMI, - ZYDIS_MNEMONIC_FCOMIP, - ZYDIS_MNEMONIC_FCOMP, - ZYDIS_MNEMONIC_FCOMPP, - ZYDIS_MNEMONIC_FCOS, - ZYDIS_MNEMONIC_FDECSTP, - ZYDIS_MNEMONIC_FDISI8087_NOP, - ZYDIS_MNEMONIC_FDIV, - ZYDIS_MNEMONIC_FDIVP, - ZYDIS_MNEMONIC_FDIVR, - ZYDIS_MNEMONIC_FDIVRP, - ZYDIS_MNEMONIC_FEMMS, - ZYDIS_MNEMONIC_FENI8087_NOP, - ZYDIS_MNEMONIC_FFREE, - ZYDIS_MNEMONIC_FFREEP, - ZYDIS_MNEMONIC_FIADD, - ZYDIS_MNEMONIC_FICOM, - ZYDIS_MNEMONIC_FICOMP, - ZYDIS_MNEMONIC_FIDIV, - ZYDIS_MNEMONIC_FIDIVR, - ZYDIS_MNEMONIC_FILD, - ZYDIS_MNEMONIC_FIMUL, - ZYDIS_MNEMONIC_FINCSTP, - ZYDIS_MNEMONIC_FIST, - ZYDIS_MNEMONIC_FISTP, - ZYDIS_MNEMONIC_FISTTP, - ZYDIS_MNEMONIC_FISUB, - ZYDIS_MNEMONIC_FISUBR, - ZYDIS_MNEMONIC_FLD, - ZYDIS_MNEMONIC_FLD1, - ZYDIS_MNEMONIC_FLDCW, - ZYDIS_MNEMONIC_FLDENV, - ZYDIS_MNEMONIC_FLDL2E, - ZYDIS_MNEMONIC_FLDL2T, - ZYDIS_MNEMONIC_FLDLG2, - ZYDIS_MNEMONIC_FLDLN2, - ZYDIS_MNEMONIC_FLDPI, - ZYDIS_MNEMONIC_FLDZ, - ZYDIS_MNEMONIC_FMUL, - ZYDIS_MNEMONIC_FMULP, - ZYDIS_MNEMONIC_FNCLEX, - ZYDIS_MNEMONIC_FNINIT, - ZYDIS_MNEMONIC_FNOP, - ZYDIS_MNEMONIC_FNSAVE, - ZYDIS_MNEMONIC_FNSTCW, - ZYDIS_MNEMONIC_FNSTENV, - ZYDIS_MNEMONIC_FNSTSW, - ZYDIS_MNEMONIC_FPATAN, - ZYDIS_MNEMONIC_FPREM, - ZYDIS_MNEMONIC_FPREM1, - ZYDIS_MNEMONIC_FPTAN, - ZYDIS_MNEMONIC_FRNDINT, - ZYDIS_MNEMONIC_FRSTOR, - ZYDIS_MNEMONIC_FSCALE, - ZYDIS_MNEMONIC_FSETPM287_NOP, - ZYDIS_MNEMONIC_FSIN, - ZYDIS_MNEMONIC_FSINCOS, - ZYDIS_MNEMONIC_FSQRT, - ZYDIS_MNEMONIC_FST, - ZYDIS_MNEMONIC_FSTP, - ZYDIS_MNEMONIC_FSTPNCE, - ZYDIS_MNEMONIC_FSUB, - ZYDIS_MNEMONIC_FSUBP, - ZYDIS_MNEMONIC_FSUBR, - ZYDIS_MNEMONIC_FSUBRP, - ZYDIS_MNEMONIC_FTST, - ZYDIS_MNEMONIC_FUCOM, - ZYDIS_MNEMONIC_FUCOMI, - ZYDIS_MNEMONIC_FUCOMIP, - ZYDIS_MNEMONIC_FUCOMP, - ZYDIS_MNEMONIC_FUCOMPP, - ZYDIS_MNEMONIC_FWAIT, - ZYDIS_MNEMONIC_FXAM, - ZYDIS_MNEMONIC_FXCH, - ZYDIS_MNEMONIC_FXRSTOR, - ZYDIS_MNEMONIC_FXRSTOR64, - ZYDIS_MNEMONIC_FXSAVE, - ZYDIS_MNEMONIC_FXSAVE64, - ZYDIS_MNEMONIC_FXTRACT, - ZYDIS_MNEMONIC_FYL2X, - ZYDIS_MNEMONIC_FYL2XP1, - ZYDIS_MNEMONIC_GETSEC, - ZYDIS_MNEMONIC_GF2P8AFFINEINVQB, - ZYDIS_MNEMONIC_GF2P8AFFINEQB, - ZYDIS_MNEMONIC_GF2P8MULB, - ZYDIS_MNEMONIC_HADDPD, - ZYDIS_MNEMONIC_HADDPS, - ZYDIS_MNEMONIC_HLT, - ZYDIS_MNEMONIC_HSUBPD, - ZYDIS_MNEMONIC_HSUBPS, - ZYDIS_MNEMONIC_IDIV, - ZYDIS_MNEMONIC_IMUL, - ZYDIS_MNEMONIC_IN, - ZYDIS_MNEMONIC_INC, - ZYDIS_MNEMONIC_INCSSPD, - ZYDIS_MNEMONIC_INCSSPQ, - ZYDIS_MNEMONIC_INSB, - ZYDIS_MNEMONIC_INSD, - ZYDIS_MNEMONIC_INSERTPS, - ZYDIS_MNEMONIC_INSERTQ, - ZYDIS_MNEMONIC_INSW, - ZYDIS_MNEMONIC_INT, - ZYDIS_MNEMONIC_INT1, - ZYDIS_MNEMONIC_INT3, - ZYDIS_MNEMONIC_INTO, - ZYDIS_MNEMONIC_INVD, - ZYDIS_MNEMONIC_INVEPT, - ZYDIS_MNEMONIC_INVLPG, - ZYDIS_MNEMONIC_INVLPGA, - ZYDIS_MNEMONIC_INVPCID, - ZYDIS_MNEMONIC_INVVPID, - ZYDIS_MNEMONIC_IRET, - ZYDIS_MNEMONIC_IRETD, - ZYDIS_MNEMONIC_IRETQ, - ZYDIS_MNEMONIC_JB, - ZYDIS_MNEMONIC_JBE, - ZYDIS_MNEMONIC_JCXZ, - ZYDIS_MNEMONIC_JECXZ, - ZYDIS_MNEMONIC_JKNZD, - ZYDIS_MNEMONIC_JKZD, - ZYDIS_MNEMONIC_JL, - ZYDIS_MNEMONIC_JLE, - ZYDIS_MNEMONIC_JMP, - ZYDIS_MNEMONIC_JNB, - ZYDIS_MNEMONIC_JNBE, - ZYDIS_MNEMONIC_JNL, - ZYDIS_MNEMONIC_JNLE, - ZYDIS_MNEMONIC_JNO, - ZYDIS_MNEMONIC_JNP, - ZYDIS_MNEMONIC_JNS, - ZYDIS_MNEMONIC_JNZ, - ZYDIS_MNEMONIC_JO, - ZYDIS_MNEMONIC_JP, - ZYDIS_MNEMONIC_JRCXZ, - ZYDIS_MNEMONIC_JS, - ZYDIS_MNEMONIC_JZ, - ZYDIS_MNEMONIC_KADDB, - ZYDIS_MNEMONIC_KADDD, - ZYDIS_MNEMONIC_KADDQ, - ZYDIS_MNEMONIC_KADDW, - ZYDIS_MNEMONIC_KAND, - ZYDIS_MNEMONIC_KANDB, - ZYDIS_MNEMONIC_KANDD, - ZYDIS_MNEMONIC_KANDN, - ZYDIS_MNEMONIC_KANDNB, - ZYDIS_MNEMONIC_KANDND, - ZYDIS_MNEMONIC_KANDNQ, - ZYDIS_MNEMONIC_KANDNR, - ZYDIS_MNEMONIC_KANDNW, - ZYDIS_MNEMONIC_KANDQ, - ZYDIS_MNEMONIC_KANDW, - ZYDIS_MNEMONIC_KCONCATH, - ZYDIS_MNEMONIC_KCONCATL, - ZYDIS_MNEMONIC_KEXTRACT, - ZYDIS_MNEMONIC_KMERGE2L1H, - ZYDIS_MNEMONIC_KMERGE2L1L, - ZYDIS_MNEMONIC_KMOV, - ZYDIS_MNEMONIC_KMOVB, - ZYDIS_MNEMONIC_KMOVD, - ZYDIS_MNEMONIC_KMOVQ, - ZYDIS_MNEMONIC_KMOVW, - ZYDIS_MNEMONIC_KNOT, - ZYDIS_MNEMONIC_KNOTB, - ZYDIS_MNEMONIC_KNOTD, - ZYDIS_MNEMONIC_KNOTQ, - ZYDIS_MNEMONIC_KNOTW, - ZYDIS_MNEMONIC_KOR, - ZYDIS_MNEMONIC_KORB, - ZYDIS_MNEMONIC_KORD, - ZYDIS_MNEMONIC_KORQ, - ZYDIS_MNEMONIC_KORTEST, - ZYDIS_MNEMONIC_KORTESTB, - ZYDIS_MNEMONIC_KORTESTD, - ZYDIS_MNEMONIC_KORTESTQ, - ZYDIS_MNEMONIC_KORTESTW, - ZYDIS_MNEMONIC_KORW, - ZYDIS_MNEMONIC_KSHIFTLB, - ZYDIS_MNEMONIC_KSHIFTLD, - ZYDIS_MNEMONIC_KSHIFTLQ, - ZYDIS_MNEMONIC_KSHIFTLW, - ZYDIS_MNEMONIC_KSHIFTRB, - ZYDIS_MNEMONIC_KSHIFTRD, - ZYDIS_MNEMONIC_KSHIFTRQ, - ZYDIS_MNEMONIC_KSHIFTRW, - ZYDIS_MNEMONIC_KTESTB, - ZYDIS_MNEMONIC_KTESTD, - ZYDIS_MNEMONIC_KTESTQ, - ZYDIS_MNEMONIC_KTESTW, - ZYDIS_MNEMONIC_KUNPCKBW, - ZYDIS_MNEMONIC_KUNPCKDQ, - ZYDIS_MNEMONIC_KUNPCKWD, - ZYDIS_MNEMONIC_KXNOR, - ZYDIS_MNEMONIC_KXNORB, - ZYDIS_MNEMONIC_KXNORD, - ZYDIS_MNEMONIC_KXNORQ, - ZYDIS_MNEMONIC_KXNORW, - ZYDIS_MNEMONIC_KXOR, - ZYDIS_MNEMONIC_KXORB, - ZYDIS_MNEMONIC_KXORD, - ZYDIS_MNEMONIC_KXORQ, - ZYDIS_MNEMONIC_KXORW, - ZYDIS_MNEMONIC_LAHF, - ZYDIS_MNEMONIC_LAR, - ZYDIS_MNEMONIC_LDDQU, - ZYDIS_MNEMONIC_LDMXCSR, - ZYDIS_MNEMONIC_LDS, - ZYDIS_MNEMONIC_LEA, - ZYDIS_MNEMONIC_LEAVE, - ZYDIS_MNEMONIC_LES, - ZYDIS_MNEMONIC_LFENCE, - ZYDIS_MNEMONIC_LFS, - ZYDIS_MNEMONIC_LGDT, - ZYDIS_MNEMONIC_LGS, - ZYDIS_MNEMONIC_LIDT, - ZYDIS_MNEMONIC_LLDT, - ZYDIS_MNEMONIC_LLWPCB, - ZYDIS_MNEMONIC_LMSW, - ZYDIS_MNEMONIC_LODSB, - ZYDIS_MNEMONIC_LODSD, - ZYDIS_MNEMONIC_LODSQ, - ZYDIS_MNEMONIC_LODSW, - ZYDIS_MNEMONIC_LOOP, - ZYDIS_MNEMONIC_LOOPE, - ZYDIS_MNEMONIC_LOOPNE, - ZYDIS_MNEMONIC_LSL, - ZYDIS_MNEMONIC_LSS, - ZYDIS_MNEMONIC_LTR, - ZYDIS_MNEMONIC_LWPINS, - ZYDIS_MNEMONIC_LWPVAL, - ZYDIS_MNEMONIC_LZCNT, - ZYDIS_MNEMONIC_MASKMOVDQU, - ZYDIS_MNEMONIC_MASKMOVQ, - ZYDIS_MNEMONIC_MAXPD, - ZYDIS_MNEMONIC_MAXPS, - ZYDIS_MNEMONIC_MAXSD, - ZYDIS_MNEMONIC_MAXSS, - ZYDIS_MNEMONIC_MFENCE, - ZYDIS_MNEMONIC_MINPD, - ZYDIS_MNEMONIC_MINPS, - ZYDIS_MNEMONIC_MINSD, - ZYDIS_MNEMONIC_MINSS, - ZYDIS_MNEMONIC_MONITOR, - ZYDIS_MNEMONIC_MONITORX, - ZYDIS_MNEMONIC_MONTMUL, - ZYDIS_MNEMONIC_MOV, - ZYDIS_MNEMONIC_MOVAPD, - ZYDIS_MNEMONIC_MOVAPS, - ZYDIS_MNEMONIC_MOVBE, - ZYDIS_MNEMONIC_MOVD, - ZYDIS_MNEMONIC_MOVDDUP, - ZYDIS_MNEMONIC_MOVDIR64B, - ZYDIS_MNEMONIC_MOVDIRI, - ZYDIS_MNEMONIC_MOVDQ2Q, - ZYDIS_MNEMONIC_MOVDQA, - ZYDIS_MNEMONIC_MOVDQU, - ZYDIS_MNEMONIC_MOVHLPS, - ZYDIS_MNEMONIC_MOVHPD, - ZYDIS_MNEMONIC_MOVHPS, - ZYDIS_MNEMONIC_MOVLHPS, - ZYDIS_MNEMONIC_MOVLPD, - ZYDIS_MNEMONIC_MOVLPS, - ZYDIS_MNEMONIC_MOVMSKPD, - ZYDIS_MNEMONIC_MOVMSKPS, - ZYDIS_MNEMONIC_MOVNTDQ, - ZYDIS_MNEMONIC_MOVNTDQA, - ZYDIS_MNEMONIC_MOVNTI, - ZYDIS_MNEMONIC_MOVNTPD, - ZYDIS_MNEMONIC_MOVNTPS, - ZYDIS_MNEMONIC_MOVNTQ, - ZYDIS_MNEMONIC_MOVNTSD, - ZYDIS_MNEMONIC_MOVNTSS, - ZYDIS_MNEMONIC_MOVQ, - ZYDIS_MNEMONIC_MOVQ2DQ, - ZYDIS_MNEMONIC_MOVSB, - ZYDIS_MNEMONIC_MOVSD, - ZYDIS_MNEMONIC_MOVSHDUP, - ZYDIS_MNEMONIC_MOVSLDUP, - ZYDIS_MNEMONIC_MOVSQ, - ZYDIS_MNEMONIC_MOVSS, - ZYDIS_MNEMONIC_MOVSW, - ZYDIS_MNEMONIC_MOVSX, - ZYDIS_MNEMONIC_MOVSXD, - ZYDIS_MNEMONIC_MOVUPD, - ZYDIS_MNEMONIC_MOVUPS, - ZYDIS_MNEMONIC_MOVZX, - ZYDIS_MNEMONIC_MPSADBW, - ZYDIS_MNEMONIC_MUL, - ZYDIS_MNEMONIC_MULPD, - ZYDIS_MNEMONIC_MULPS, - ZYDIS_MNEMONIC_MULSD, - ZYDIS_MNEMONIC_MULSS, - ZYDIS_MNEMONIC_MULX, - ZYDIS_MNEMONIC_MWAIT, - ZYDIS_MNEMONIC_MWAITX, - ZYDIS_MNEMONIC_NEG, - ZYDIS_MNEMONIC_NOP, - ZYDIS_MNEMONIC_NOT, - ZYDIS_MNEMONIC_OR, - ZYDIS_MNEMONIC_ORPD, - ZYDIS_MNEMONIC_ORPS, - ZYDIS_MNEMONIC_OUT, - ZYDIS_MNEMONIC_OUTSB, - ZYDIS_MNEMONIC_OUTSD, - ZYDIS_MNEMONIC_OUTSW, - ZYDIS_MNEMONIC_PABSB, - ZYDIS_MNEMONIC_PABSD, - ZYDIS_MNEMONIC_PABSW, - ZYDIS_MNEMONIC_PACKSSDW, - ZYDIS_MNEMONIC_PACKSSWB, - ZYDIS_MNEMONIC_PACKUSDW, - ZYDIS_MNEMONIC_PACKUSWB, - ZYDIS_MNEMONIC_PADDB, - ZYDIS_MNEMONIC_PADDD, - ZYDIS_MNEMONIC_PADDQ, - ZYDIS_MNEMONIC_PADDSB, - ZYDIS_MNEMONIC_PADDSW, - ZYDIS_MNEMONIC_PADDUSB, - ZYDIS_MNEMONIC_PADDUSW, - ZYDIS_MNEMONIC_PADDW, - ZYDIS_MNEMONIC_PALIGNR, - ZYDIS_MNEMONIC_PAND, - ZYDIS_MNEMONIC_PANDN, - ZYDIS_MNEMONIC_PAUSE, - ZYDIS_MNEMONIC_PAVGB, - ZYDIS_MNEMONIC_PAVGUSB, - ZYDIS_MNEMONIC_PAVGW, - ZYDIS_MNEMONIC_PBLENDVB, - ZYDIS_MNEMONIC_PBLENDW, - ZYDIS_MNEMONIC_PCLMULQDQ, - ZYDIS_MNEMONIC_PCMPEQB, - ZYDIS_MNEMONIC_PCMPEQD, - ZYDIS_MNEMONIC_PCMPEQQ, - ZYDIS_MNEMONIC_PCMPEQW, - ZYDIS_MNEMONIC_PCMPESTRI, - ZYDIS_MNEMONIC_PCMPESTRM, - ZYDIS_MNEMONIC_PCMPGTB, - ZYDIS_MNEMONIC_PCMPGTD, - ZYDIS_MNEMONIC_PCMPGTQ, - ZYDIS_MNEMONIC_PCMPGTW, - ZYDIS_MNEMONIC_PCMPISTRI, - ZYDIS_MNEMONIC_PCMPISTRM, - ZYDIS_MNEMONIC_PCONFIG, - ZYDIS_MNEMONIC_PDEP, - ZYDIS_MNEMONIC_PEXT, - ZYDIS_MNEMONIC_PEXTRB, - ZYDIS_MNEMONIC_PEXTRD, - ZYDIS_MNEMONIC_PEXTRQ, - ZYDIS_MNEMONIC_PEXTRW, - ZYDIS_MNEMONIC_PF2ID, - ZYDIS_MNEMONIC_PF2IW, - ZYDIS_MNEMONIC_PFACC, - ZYDIS_MNEMONIC_PFADD, - ZYDIS_MNEMONIC_PFCMPEQ, - ZYDIS_MNEMONIC_PFCMPGE, - ZYDIS_MNEMONIC_PFCMPGT, - ZYDIS_MNEMONIC_PFCPIT1, - ZYDIS_MNEMONIC_PFMAX, - ZYDIS_MNEMONIC_PFMIN, - ZYDIS_MNEMONIC_PFMUL, - ZYDIS_MNEMONIC_PFNACC, - ZYDIS_MNEMONIC_PFPNACC, - ZYDIS_MNEMONIC_PFRCP, - ZYDIS_MNEMONIC_PFRCPIT2, - ZYDIS_MNEMONIC_PFRSQIT1, - ZYDIS_MNEMONIC_PFSQRT, - ZYDIS_MNEMONIC_PFSUB, - ZYDIS_MNEMONIC_PFSUBR, - ZYDIS_MNEMONIC_PHADDD, - ZYDIS_MNEMONIC_PHADDSW, - ZYDIS_MNEMONIC_PHADDW, - ZYDIS_MNEMONIC_PHMINPOSUW, - ZYDIS_MNEMONIC_PHSUBD, - ZYDIS_MNEMONIC_PHSUBSW, - ZYDIS_MNEMONIC_PHSUBW, - ZYDIS_MNEMONIC_PI2FD, - ZYDIS_MNEMONIC_PI2FW, - ZYDIS_MNEMONIC_PINSRB, - ZYDIS_MNEMONIC_PINSRD, - ZYDIS_MNEMONIC_PINSRQ, - ZYDIS_MNEMONIC_PINSRW, - ZYDIS_MNEMONIC_PMADDUBSW, - ZYDIS_MNEMONIC_PMADDWD, - ZYDIS_MNEMONIC_PMAXSB, - ZYDIS_MNEMONIC_PMAXSD, - ZYDIS_MNEMONIC_PMAXSW, - ZYDIS_MNEMONIC_PMAXUB, - ZYDIS_MNEMONIC_PMAXUD, - ZYDIS_MNEMONIC_PMAXUW, - ZYDIS_MNEMONIC_PMINSB, - ZYDIS_MNEMONIC_PMINSD, - ZYDIS_MNEMONIC_PMINSW, - ZYDIS_MNEMONIC_PMINUB, - ZYDIS_MNEMONIC_PMINUD, - ZYDIS_MNEMONIC_PMINUW, - ZYDIS_MNEMONIC_PMOVMSKB, - ZYDIS_MNEMONIC_PMOVSXBD, - ZYDIS_MNEMONIC_PMOVSXBQ, - ZYDIS_MNEMONIC_PMOVSXBW, - ZYDIS_MNEMONIC_PMOVSXDQ, - ZYDIS_MNEMONIC_PMOVSXWD, - ZYDIS_MNEMONIC_PMOVSXWQ, - ZYDIS_MNEMONIC_PMOVZXBD, - ZYDIS_MNEMONIC_PMOVZXBQ, - ZYDIS_MNEMONIC_PMOVZXBW, - ZYDIS_MNEMONIC_PMOVZXDQ, - ZYDIS_MNEMONIC_PMOVZXWD, - ZYDIS_MNEMONIC_PMOVZXWQ, - ZYDIS_MNEMONIC_PMULDQ, - ZYDIS_MNEMONIC_PMULHRSW, - ZYDIS_MNEMONIC_PMULHRW, - ZYDIS_MNEMONIC_PMULHUW, - ZYDIS_MNEMONIC_PMULHW, - ZYDIS_MNEMONIC_PMULLD, - ZYDIS_MNEMONIC_PMULLW, - ZYDIS_MNEMONIC_PMULUDQ, - ZYDIS_MNEMONIC_POP, - ZYDIS_MNEMONIC_POPA, - ZYDIS_MNEMONIC_POPAD, - ZYDIS_MNEMONIC_POPCNT, - ZYDIS_MNEMONIC_POPF, - ZYDIS_MNEMONIC_POPFD, - ZYDIS_MNEMONIC_POPFQ, - ZYDIS_MNEMONIC_POR, - ZYDIS_MNEMONIC_PREFETCH, - ZYDIS_MNEMONIC_PREFETCHNTA, - ZYDIS_MNEMONIC_PREFETCHT0, - ZYDIS_MNEMONIC_PREFETCHT1, - ZYDIS_MNEMONIC_PREFETCHT2, - ZYDIS_MNEMONIC_PREFETCHW, - ZYDIS_MNEMONIC_PREFETCHWT1, - ZYDIS_MNEMONIC_PSADBW, - ZYDIS_MNEMONIC_PSHUFB, - ZYDIS_MNEMONIC_PSHUFD, - ZYDIS_MNEMONIC_PSHUFHW, - ZYDIS_MNEMONIC_PSHUFLW, - ZYDIS_MNEMONIC_PSHUFW, - ZYDIS_MNEMONIC_PSIGNB, - ZYDIS_MNEMONIC_PSIGND, - ZYDIS_MNEMONIC_PSIGNW, - ZYDIS_MNEMONIC_PSLLD, - ZYDIS_MNEMONIC_PSLLDQ, - ZYDIS_MNEMONIC_PSLLQ, - ZYDIS_MNEMONIC_PSLLW, - ZYDIS_MNEMONIC_PSRAD, - ZYDIS_MNEMONIC_PSRAW, - ZYDIS_MNEMONIC_PSRLD, - ZYDIS_MNEMONIC_PSRLDQ, - ZYDIS_MNEMONIC_PSRLQ, - ZYDIS_MNEMONIC_PSRLW, - ZYDIS_MNEMONIC_PSUBB, - ZYDIS_MNEMONIC_PSUBD, - ZYDIS_MNEMONIC_PSUBQ, - ZYDIS_MNEMONIC_PSUBSB, - ZYDIS_MNEMONIC_PSUBSW, - ZYDIS_MNEMONIC_PSUBUSB, - ZYDIS_MNEMONIC_PSUBUSW, - ZYDIS_MNEMONIC_PSUBW, - ZYDIS_MNEMONIC_PSWAPD, - ZYDIS_MNEMONIC_PTEST, - ZYDIS_MNEMONIC_PTWRITE, - ZYDIS_MNEMONIC_PUNPCKHBW, - ZYDIS_MNEMONIC_PUNPCKHDQ, - ZYDIS_MNEMONIC_PUNPCKHQDQ, - ZYDIS_MNEMONIC_PUNPCKHWD, - ZYDIS_MNEMONIC_PUNPCKLBW, - ZYDIS_MNEMONIC_PUNPCKLDQ, - ZYDIS_MNEMONIC_PUNPCKLQDQ, - ZYDIS_MNEMONIC_PUNPCKLWD, - ZYDIS_MNEMONIC_PUSH, - ZYDIS_MNEMONIC_PUSHA, - ZYDIS_MNEMONIC_PUSHAD, - ZYDIS_MNEMONIC_PUSHF, - ZYDIS_MNEMONIC_PUSHFD, - ZYDIS_MNEMONIC_PUSHFQ, - ZYDIS_MNEMONIC_PXOR, - ZYDIS_MNEMONIC_RCL, - ZYDIS_MNEMONIC_RCPPS, - ZYDIS_MNEMONIC_RCPSS, - ZYDIS_MNEMONIC_RCR, - ZYDIS_MNEMONIC_RDFSBASE, - ZYDIS_MNEMONIC_RDGSBASE, - ZYDIS_MNEMONIC_RDMSR, - ZYDIS_MNEMONIC_RDPID, - ZYDIS_MNEMONIC_RDPKRU, - ZYDIS_MNEMONIC_RDPMC, - ZYDIS_MNEMONIC_RDRAND, - ZYDIS_MNEMONIC_RDSEED, - ZYDIS_MNEMONIC_RDSSPD, - ZYDIS_MNEMONIC_RDSSPQ, - ZYDIS_MNEMONIC_RDTSC, - ZYDIS_MNEMONIC_RDTSCP, - ZYDIS_MNEMONIC_RET, - ZYDIS_MNEMONIC_ROL, - ZYDIS_MNEMONIC_ROR, - ZYDIS_MNEMONIC_RORX, - ZYDIS_MNEMONIC_ROUNDPD, - ZYDIS_MNEMONIC_ROUNDPS, - ZYDIS_MNEMONIC_ROUNDSD, - ZYDIS_MNEMONIC_ROUNDSS, - ZYDIS_MNEMONIC_RSM, - ZYDIS_MNEMONIC_RSQRTPS, - ZYDIS_MNEMONIC_RSQRTSS, - ZYDIS_MNEMONIC_RSTORSSP, - ZYDIS_MNEMONIC_SAHF, - ZYDIS_MNEMONIC_SALC, - ZYDIS_MNEMONIC_SAR, - ZYDIS_MNEMONIC_SARX, - ZYDIS_MNEMONIC_SAVEPREVSSP, - ZYDIS_MNEMONIC_SBB, - ZYDIS_MNEMONIC_SCASB, - ZYDIS_MNEMONIC_SCASD, - ZYDIS_MNEMONIC_SCASQ, - ZYDIS_MNEMONIC_SCASW, - ZYDIS_MNEMONIC_SETB, - ZYDIS_MNEMONIC_SETBE, - ZYDIS_MNEMONIC_SETL, - ZYDIS_MNEMONIC_SETLE, - ZYDIS_MNEMONIC_SETNB, - ZYDIS_MNEMONIC_SETNBE, - ZYDIS_MNEMONIC_SETNL, - ZYDIS_MNEMONIC_SETNLE, - ZYDIS_MNEMONIC_SETNO, - ZYDIS_MNEMONIC_SETNP, - ZYDIS_MNEMONIC_SETNS, - ZYDIS_MNEMONIC_SETNZ, - ZYDIS_MNEMONIC_SETO, - ZYDIS_MNEMONIC_SETP, - ZYDIS_MNEMONIC_SETS, - ZYDIS_MNEMONIC_SETSSBSY, - ZYDIS_MNEMONIC_SETZ, - ZYDIS_MNEMONIC_SFENCE, - ZYDIS_MNEMONIC_SGDT, - ZYDIS_MNEMONIC_SHA1MSG1, - ZYDIS_MNEMONIC_SHA1MSG2, - ZYDIS_MNEMONIC_SHA1NEXTE, - ZYDIS_MNEMONIC_SHA1RNDS4, - ZYDIS_MNEMONIC_SHA256MSG1, - ZYDIS_MNEMONIC_SHA256MSG2, - ZYDIS_MNEMONIC_SHA256RNDS2, - ZYDIS_MNEMONIC_SHL, - ZYDIS_MNEMONIC_SHLD, - ZYDIS_MNEMONIC_SHLX, - ZYDIS_MNEMONIC_SHR, - ZYDIS_MNEMONIC_SHRD, - ZYDIS_MNEMONIC_SHRX, - ZYDIS_MNEMONIC_SHUFPD, - ZYDIS_MNEMONIC_SHUFPS, - ZYDIS_MNEMONIC_SIDT, - ZYDIS_MNEMONIC_SKINIT, - ZYDIS_MNEMONIC_SLDT, - ZYDIS_MNEMONIC_SLWPCB, - ZYDIS_MNEMONIC_SMSW, - ZYDIS_MNEMONIC_SPFLT, - ZYDIS_MNEMONIC_SQRTPD, - ZYDIS_MNEMONIC_SQRTPS, - ZYDIS_MNEMONIC_SQRTSD, - ZYDIS_MNEMONIC_SQRTSS, - ZYDIS_MNEMONIC_STAC, - ZYDIS_MNEMONIC_STC, - ZYDIS_MNEMONIC_STD, - ZYDIS_MNEMONIC_STGI, - ZYDIS_MNEMONIC_STI, - ZYDIS_MNEMONIC_STMXCSR, - ZYDIS_MNEMONIC_STOSB, - ZYDIS_MNEMONIC_STOSD, - ZYDIS_MNEMONIC_STOSQ, - ZYDIS_MNEMONIC_STOSW, - ZYDIS_MNEMONIC_STR, - ZYDIS_MNEMONIC_SUB, - ZYDIS_MNEMONIC_SUBPD, - ZYDIS_MNEMONIC_SUBPS, - ZYDIS_MNEMONIC_SUBSD, - ZYDIS_MNEMONIC_SUBSS, - ZYDIS_MNEMONIC_SWAPGS, - ZYDIS_MNEMONIC_SYSCALL, - ZYDIS_MNEMONIC_SYSENTER, - ZYDIS_MNEMONIC_SYSEXIT, - ZYDIS_MNEMONIC_SYSRET, - ZYDIS_MNEMONIC_T1MSKC, - ZYDIS_MNEMONIC_TEST, - ZYDIS_MNEMONIC_TPAUSE, - ZYDIS_MNEMONIC_TZCNT, - ZYDIS_MNEMONIC_TZCNTI, - ZYDIS_MNEMONIC_TZMSK, - ZYDIS_MNEMONIC_UCOMISD, - ZYDIS_MNEMONIC_UCOMISS, - ZYDIS_MNEMONIC_UD0, - ZYDIS_MNEMONIC_UD1, - ZYDIS_MNEMONIC_UD2, - ZYDIS_MNEMONIC_UMONITOR, - ZYDIS_MNEMONIC_UMWAIT, - ZYDIS_MNEMONIC_UNPCKHPD, - ZYDIS_MNEMONIC_UNPCKHPS, - ZYDIS_MNEMONIC_UNPCKLPD, - ZYDIS_MNEMONIC_UNPCKLPS, - ZYDIS_MNEMONIC_V4FMADDPS, - ZYDIS_MNEMONIC_V4FMADDSS, - ZYDIS_MNEMONIC_V4FNMADDPS, - ZYDIS_MNEMONIC_V4FNMADDSS, - ZYDIS_MNEMONIC_VADDNPD, - ZYDIS_MNEMONIC_VADDNPS, - ZYDIS_MNEMONIC_VADDPD, - ZYDIS_MNEMONIC_VADDPS, - ZYDIS_MNEMONIC_VADDSD, - ZYDIS_MNEMONIC_VADDSETSPS, - ZYDIS_MNEMONIC_VADDSS, - ZYDIS_MNEMONIC_VADDSUBPD, - ZYDIS_MNEMONIC_VADDSUBPS, - ZYDIS_MNEMONIC_VAESDEC, - ZYDIS_MNEMONIC_VAESDECLAST, - ZYDIS_MNEMONIC_VAESENC, - ZYDIS_MNEMONIC_VAESENCLAST, - ZYDIS_MNEMONIC_VAESIMC, - ZYDIS_MNEMONIC_VAESKEYGENASSIST, - ZYDIS_MNEMONIC_VALIGND, - ZYDIS_MNEMONIC_VALIGNQ, - ZYDIS_MNEMONIC_VANDNPD, - ZYDIS_MNEMONIC_VANDNPS, - ZYDIS_MNEMONIC_VANDPD, - ZYDIS_MNEMONIC_VANDPS, - ZYDIS_MNEMONIC_VBLENDMPD, - ZYDIS_MNEMONIC_VBLENDMPS, - ZYDIS_MNEMONIC_VBLENDPD, - ZYDIS_MNEMONIC_VBLENDPS, - ZYDIS_MNEMONIC_VBLENDVPD, - ZYDIS_MNEMONIC_VBLENDVPS, - ZYDIS_MNEMONIC_VBROADCASTF128, - ZYDIS_MNEMONIC_VBROADCASTF32X2, - ZYDIS_MNEMONIC_VBROADCASTF32X4, - ZYDIS_MNEMONIC_VBROADCASTF32X8, - ZYDIS_MNEMONIC_VBROADCASTF64X2, - ZYDIS_MNEMONIC_VBROADCASTF64X4, - ZYDIS_MNEMONIC_VBROADCASTI128, - ZYDIS_MNEMONIC_VBROADCASTI32X2, - ZYDIS_MNEMONIC_VBROADCASTI32X4, - ZYDIS_MNEMONIC_VBROADCASTI32X8, - ZYDIS_MNEMONIC_VBROADCASTI64X2, - ZYDIS_MNEMONIC_VBROADCASTI64X4, - ZYDIS_MNEMONIC_VBROADCASTSD, - ZYDIS_MNEMONIC_VBROADCASTSS, - ZYDIS_MNEMONIC_VCMPPD, - ZYDIS_MNEMONIC_VCMPPS, - ZYDIS_MNEMONIC_VCMPSD, - ZYDIS_MNEMONIC_VCMPSS, - ZYDIS_MNEMONIC_VCOMISD, - ZYDIS_MNEMONIC_VCOMISS, - ZYDIS_MNEMONIC_VCOMPRESSPD, - ZYDIS_MNEMONIC_VCOMPRESSPS, - ZYDIS_MNEMONIC_VCVTDQ2PD, - ZYDIS_MNEMONIC_VCVTDQ2PS, - ZYDIS_MNEMONIC_VCVTFXPNTDQ2PS, - ZYDIS_MNEMONIC_VCVTFXPNTPD2DQ, - ZYDIS_MNEMONIC_VCVTFXPNTPD2UDQ, - ZYDIS_MNEMONIC_VCVTFXPNTPS2DQ, - ZYDIS_MNEMONIC_VCVTFXPNTPS2UDQ, - ZYDIS_MNEMONIC_VCVTFXPNTUDQ2PS, - ZYDIS_MNEMONIC_VCVTPD2DQ, - ZYDIS_MNEMONIC_VCVTPD2PS, - ZYDIS_MNEMONIC_VCVTPD2QQ, - ZYDIS_MNEMONIC_VCVTPD2UDQ, - ZYDIS_MNEMONIC_VCVTPD2UQQ, - ZYDIS_MNEMONIC_VCVTPH2PS, - ZYDIS_MNEMONIC_VCVTPS2DQ, - ZYDIS_MNEMONIC_VCVTPS2PD, - ZYDIS_MNEMONIC_VCVTPS2PH, - ZYDIS_MNEMONIC_VCVTPS2QQ, - ZYDIS_MNEMONIC_VCVTPS2UDQ, - ZYDIS_MNEMONIC_VCVTPS2UQQ, - ZYDIS_MNEMONIC_VCVTQQ2PD, - ZYDIS_MNEMONIC_VCVTQQ2PS, - ZYDIS_MNEMONIC_VCVTSD2SI, - ZYDIS_MNEMONIC_VCVTSD2SS, - ZYDIS_MNEMONIC_VCVTSD2USI, - ZYDIS_MNEMONIC_VCVTSI2SD, - ZYDIS_MNEMONIC_VCVTSI2SS, - ZYDIS_MNEMONIC_VCVTSS2SD, - ZYDIS_MNEMONIC_VCVTSS2SI, - ZYDIS_MNEMONIC_VCVTSS2USI, - ZYDIS_MNEMONIC_VCVTTPD2DQ, - ZYDIS_MNEMONIC_VCVTTPD2QQ, - ZYDIS_MNEMONIC_VCVTTPD2UDQ, - ZYDIS_MNEMONIC_VCVTTPD2UQQ, - ZYDIS_MNEMONIC_VCVTTPS2DQ, - ZYDIS_MNEMONIC_VCVTTPS2QQ, - ZYDIS_MNEMONIC_VCVTTPS2UDQ, - ZYDIS_MNEMONIC_VCVTTPS2UQQ, - ZYDIS_MNEMONIC_VCVTTSD2SI, - ZYDIS_MNEMONIC_VCVTTSD2USI, - ZYDIS_MNEMONIC_VCVTTSS2SI, - ZYDIS_MNEMONIC_VCVTTSS2USI, - ZYDIS_MNEMONIC_VCVTUDQ2PD, - ZYDIS_MNEMONIC_VCVTUDQ2PS, - ZYDIS_MNEMONIC_VCVTUQQ2PD, - ZYDIS_MNEMONIC_VCVTUQQ2PS, - ZYDIS_MNEMONIC_VCVTUSI2SD, - ZYDIS_MNEMONIC_VCVTUSI2SS, - ZYDIS_MNEMONIC_VDBPSADBW, - ZYDIS_MNEMONIC_VDIVPD, - ZYDIS_MNEMONIC_VDIVPS, - ZYDIS_MNEMONIC_VDIVSD, - ZYDIS_MNEMONIC_VDIVSS, - ZYDIS_MNEMONIC_VDPPD, - ZYDIS_MNEMONIC_VDPPS, - ZYDIS_MNEMONIC_VERR, - ZYDIS_MNEMONIC_VERW, - ZYDIS_MNEMONIC_VEXP223PS, - ZYDIS_MNEMONIC_VEXP2PD, - ZYDIS_MNEMONIC_VEXP2PS, - ZYDIS_MNEMONIC_VEXPANDPD, - ZYDIS_MNEMONIC_VEXPANDPS, - ZYDIS_MNEMONIC_VEXTRACTF128, - ZYDIS_MNEMONIC_VEXTRACTF32X4, - ZYDIS_MNEMONIC_VEXTRACTF32X8, - ZYDIS_MNEMONIC_VEXTRACTF64X2, - ZYDIS_MNEMONIC_VEXTRACTF64X4, - ZYDIS_MNEMONIC_VEXTRACTI128, - ZYDIS_MNEMONIC_VEXTRACTI32X4, - ZYDIS_MNEMONIC_VEXTRACTI32X8, - ZYDIS_MNEMONIC_VEXTRACTI64X2, - ZYDIS_MNEMONIC_VEXTRACTI64X4, - ZYDIS_MNEMONIC_VEXTRACTPS, - ZYDIS_MNEMONIC_VFIXUPIMMPD, - ZYDIS_MNEMONIC_VFIXUPIMMPS, - ZYDIS_MNEMONIC_VFIXUPIMMSD, - ZYDIS_MNEMONIC_VFIXUPIMMSS, - ZYDIS_MNEMONIC_VFIXUPNANPD, - ZYDIS_MNEMONIC_VFIXUPNANPS, - ZYDIS_MNEMONIC_VFMADD132PD, - ZYDIS_MNEMONIC_VFMADD132PS, - ZYDIS_MNEMONIC_VFMADD132SD, - ZYDIS_MNEMONIC_VFMADD132SS, - ZYDIS_MNEMONIC_VFMADD213PD, - ZYDIS_MNEMONIC_VFMADD213PS, - ZYDIS_MNEMONIC_VFMADD213SD, - ZYDIS_MNEMONIC_VFMADD213SS, - ZYDIS_MNEMONIC_VFMADD231PD, - ZYDIS_MNEMONIC_VFMADD231PS, - ZYDIS_MNEMONIC_VFMADD231SD, - ZYDIS_MNEMONIC_VFMADD231SS, - ZYDIS_MNEMONIC_VFMADD233PS, - ZYDIS_MNEMONIC_VFMADDPD, - ZYDIS_MNEMONIC_VFMADDPS, - ZYDIS_MNEMONIC_VFMADDSD, - ZYDIS_MNEMONIC_VFMADDSS, - ZYDIS_MNEMONIC_VFMADDSUB132PD, - ZYDIS_MNEMONIC_VFMADDSUB132PS, - ZYDIS_MNEMONIC_VFMADDSUB213PD, - ZYDIS_MNEMONIC_VFMADDSUB213PS, - ZYDIS_MNEMONIC_VFMADDSUB231PD, - ZYDIS_MNEMONIC_VFMADDSUB231PS, - ZYDIS_MNEMONIC_VFMADDSUBPD, - ZYDIS_MNEMONIC_VFMADDSUBPS, - ZYDIS_MNEMONIC_VFMSUB132PD, - ZYDIS_MNEMONIC_VFMSUB132PS, - ZYDIS_MNEMONIC_VFMSUB132SD, - ZYDIS_MNEMONIC_VFMSUB132SS, - ZYDIS_MNEMONIC_VFMSUB213PD, - ZYDIS_MNEMONIC_VFMSUB213PS, - ZYDIS_MNEMONIC_VFMSUB213SD, - ZYDIS_MNEMONIC_VFMSUB213SS, - ZYDIS_MNEMONIC_VFMSUB231PD, - ZYDIS_MNEMONIC_VFMSUB231PS, - ZYDIS_MNEMONIC_VFMSUB231SD, - ZYDIS_MNEMONIC_VFMSUB231SS, - ZYDIS_MNEMONIC_VFMSUBADD132PD, - ZYDIS_MNEMONIC_VFMSUBADD132PS, - ZYDIS_MNEMONIC_VFMSUBADD213PD, - ZYDIS_MNEMONIC_VFMSUBADD213PS, - ZYDIS_MNEMONIC_VFMSUBADD231PD, - ZYDIS_MNEMONIC_VFMSUBADD231PS, - ZYDIS_MNEMONIC_VFMSUBADDPD, - ZYDIS_MNEMONIC_VFMSUBADDPS, - ZYDIS_MNEMONIC_VFMSUBPD, - ZYDIS_MNEMONIC_VFMSUBPS, - ZYDIS_MNEMONIC_VFMSUBSD, - ZYDIS_MNEMONIC_VFMSUBSS, - ZYDIS_MNEMONIC_VFNMADD132PD, - ZYDIS_MNEMONIC_VFNMADD132PS, - ZYDIS_MNEMONIC_VFNMADD132SD, - ZYDIS_MNEMONIC_VFNMADD132SS, - ZYDIS_MNEMONIC_VFNMADD213PD, - ZYDIS_MNEMONIC_VFNMADD213PS, - ZYDIS_MNEMONIC_VFNMADD213SD, - ZYDIS_MNEMONIC_VFNMADD213SS, - ZYDIS_MNEMONIC_VFNMADD231PD, - ZYDIS_MNEMONIC_VFNMADD231PS, - ZYDIS_MNEMONIC_VFNMADD231SD, - ZYDIS_MNEMONIC_VFNMADD231SS, - ZYDIS_MNEMONIC_VFNMADDPD, - ZYDIS_MNEMONIC_VFNMADDPS, - ZYDIS_MNEMONIC_VFNMADDSD, - ZYDIS_MNEMONIC_VFNMADDSS, - ZYDIS_MNEMONIC_VFNMSUB132PD, - ZYDIS_MNEMONIC_VFNMSUB132PS, - ZYDIS_MNEMONIC_VFNMSUB132SD, - ZYDIS_MNEMONIC_VFNMSUB132SS, - ZYDIS_MNEMONIC_VFNMSUB213PD, - ZYDIS_MNEMONIC_VFNMSUB213PS, - ZYDIS_MNEMONIC_VFNMSUB213SD, - ZYDIS_MNEMONIC_VFNMSUB213SS, - ZYDIS_MNEMONIC_VFNMSUB231PD, - ZYDIS_MNEMONIC_VFNMSUB231PS, - ZYDIS_MNEMONIC_VFNMSUB231SD, - ZYDIS_MNEMONIC_VFNMSUB231SS, - ZYDIS_MNEMONIC_VFNMSUBPD, - ZYDIS_MNEMONIC_VFNMSUBPS, - ZYDIS_MNEMONIC_VFNMSUBSD, - ZYDIS_MNEMONIC_VFNMSUBSS, - ZYDIS_MNEMONIC_VFPCLASSPD, - ZYDIS_MNEMONIC_VFPCLASSPS, - ZYDIS_MNEMONIC_VFPCLASSSD, - ZYDIS_MNEMONIC_VFPCLASSSS, - ZYDIS_MNEMONIC_VFRCZPD, - ZYDIS_MNEMONIC_VFRCZPS, - ZYDIS_MNEMONIC_VFRCZSD, - ZYDIS_MNEMONIC_VFRCZSS, - ZYDIS_MNEMONIC_VGATHERDPD, - ZYDIS_MNEMONIC_VGATHERDPS, - ZYDIS_MNEMONIC_VGATHERPF0DPD, - ZYDIS_MNEMONIC_VGATHERPF0DPS, - ZYDIS_MNEMONIC_VGATHERPF0HINTDPD, - ZYDIS_MNEMONIC_VGATHERPF0HINTDPS, - ZYDIS_MNEMONIC_VGATHERPF0QPD, - ZYDIS_MNEMONIC_VGATHERPF0QPS, - ZYDIS_MNEMONIC_VGATHERPF1DPD, - ZYDIS_MNEMONIC_VGATHERPF1DPS, - ZYDIS_MNEMONIC_VGATHERPF1QPD, - ZYDIS_MNEMONIC_VGATHERPF1QPS, - ZYDIS_MNEMONIC_VGATHERQPD, - ZYDIS_MNEMONIC_VGATHERQPS, - ZYDIS_MNEMONIC_VGETEXPPD, - ZYDIS_MNEMONIC_VGETEXPPS, - ZYDIS_MNEMONIC_VGETEXPSD, - ZYDIS_MNEMONIC_VGETEXPSS, - ZYDIS_MNEMONIC_VGETMANTPD, - ZYDIS_MNEMONIC_VGETMANTPS, - ZYDIS_MNEMONIC_VGETMANTSD, - ZYDIS_MNEMONIC_VGETMANTSS, - ZYDIS_MNEMONIC_VGF2P8AFFINEINVQB, - ZYDIS_MNEMONIC_VGF2P8AFFINEQB, - ZYDIS_MNEMONIC_VGF2P8MULB, - ZYDIS_MNEMONIC_VGMAXABSPS, - ZYDIS_MNEMONIC_VGMAXPD, - ZYDIS_MNEMONIC_VGMAXPS, - ZYDIS_MNEMONIC_VGMINPD, - ZYDIS_MNEMONIC_VGMINPS, - ZYDIS_MNEMONIC_VHADDPD, - ZYDIS_MNEMONIC_VHADDPS, - ZYDIS_MNEMONIC_VHSUBPD, - ZYDIS_MNEMONIC_VHSUBPS, - ZYDIS_MNEMONIC_VINSERTF128, - ZYDIS_MNEMONIC_VINSERTF32X4, - ZYDIS_MNEMONIC_VINSERTF32X8, - ZYDIS_MNEMONIC_VINSERTF64X2, - ZYDIS_MNEMONIC_VINSERTF64X4, - ZYDIS_MNEMONIC_VINSERTI128, - ZYDIS_MNEMONIC_VINSERTI32X4, - ZYDIS_MNEMONIC_VINSERTI32X8, - ZYDIS_MNEMONIC_VINSERTI64X2, - ZYDIS_MNEMONIC_VINSERTI64X4, - ZYDIS_MNEMONIC_VINSERTPS, - ZYDIS_MNEMONIC_VLDDQU, - ZYDIS_MNEMONIC_VLDMXCSR, - ZYDIS_MNEMONIC_VLOADUNPACKHD, - ZYDIS_MNEMONIC_VLOADUNPACKHPD, - ZYDIS_MNEMONIC_VLOADUNPACKHPS, - ZYDIS_MNEMONIC_VLOADUNPACKHQ, - ZYDIS_MNEMONIC_VLOADUNPACKLD, - ZYDIS_MNEMONIC_VLOADUNPACKLPD, - ZYDIS_MNEMONIC_VLOADUNPACKLPS, - ZYDIS_MNEMONIC_VLOADUNPACKLQ, - ZYDIS_MNEMONIC_VLOG2PS, - ZYDIS_MNEMONIC_VMASKMOVDQU, - ZYDIS_MNEMONIC_VMASKMOVPD, - ZYDIS_MNEMONIC_VMASKMOVPS, - ZYDIS_MNEMONIC_VMAXPD, - ZYDIS_MNEMONIC_VMAXPS, - ZYDIS_MNEMONIC_VMAXSD, - ZYDIS_MNEMONIC_VMAXSS, - ZYDIS_MNEMONIC_VMCALL, - ZYDIS_MNEMONIC_VMCLEAR, - ZYDIS_MNEMONIC_VMFUNC, - ZYDIS_MNEMONIC_VMINPD, - ZYDIS_MNEMONIC_VMINPS, - ZYDIS_MNEMONIC_VMINSD, - ZYDIS_MNEMONIC_VMINSS, - ZYDIS_MNEMONIC_VMLAUNCH, - ZYDIS_MNEMONIC_VMLOAD, - ZYDIS_MNEMONIC_VMMCALL, - ZYDIS_MNEMONIC_VMOVAPD, - ZYDIS_MNEMONIC_VMOVAPS, - ZYDIS_MNEMONIC_VMOVD, - ZYDIS_MNEMONIC_VMOVDDUP, - ZYDIS_MNEMONIC_VMOVDQA, - ZYDIS_MNEMONIC_VMOVDQA32, - ZYDIS_MNEMONIC_VMOVDQA64, - ZYDIS_MNEMONIC_VMOVDQU, - ZYDIS_MNEMONIC_VMOVDQU16, - ZYDIS_MNEMONIC_VMOVDQU32, - ZYDIS_MNEMONIC_VMOVDQU64, - ZYDIS_MNEMONIC_VMOVDQU8, - ZYDIS_MNEMONIC_VMOVHLPS, - ZYDIS_MNEMONIC_VMOVHPD, - ZYDIS_MNEMONIC_VMOVHPS, - ZYDIS_MNEMONIC_VMOVLHPS, - ZYDIS_MNEMONIC_VMOVLPD, - ZYDIS_MNEMONIC_VMOVLPS, - ZYDIS_MNEMONIC_VMOVMSKPD, - ZYDIS_MNEMONIC_VMOVMSKPS, - ZYDIS_MNEMONIC_VMOVNRAPD, - ZYDIS_MNEMONIC_VMOVNRAPS, - ZYDIS_MNEMONIC_VMOVNRNGOAPD, - ZYDIS_MNEMONIC_VMOVNRNGOAPS, - ZYDIS_MNEMONIC_VMOVNTDQ, - ZYDIS_MNEMONIC_VMOVNTDQA, - ZYDIS_MNEMONIC_VMOVNTPD, - ZYDIS_MNEMONIC_VMOVNTPS, - ZYDIS_MNEMONIC_VMOVQ, - ZYDIS_MNEMONIC_VMOVSD, - ZYDIS_MNEMONIC_VMOVSHDUP, - ZYDIS_MNEMONIC_VMOVSLDUP, - ZYDIS_MNEMONIC_VMOVSS, - ZYDIS_MNEMONIC_VMOVUPD, - ZYDIS_MNEMONIC_VMOVUPS, - ZYDIS_MNEMONIC_VMPSADBW, - ZYDIS_MNEMONIC_VMPTRLD, - ZYDIS_MNEMONIC_VMPTRST, - ZYDIS_MNEMONIC_VMREAD, - ZYDIS_MNEMONIC_VMRESUME, - ZYDIS_MNEMONIC_VMRUN, - ZYDIS_MNEMONIC_VMSAVE, - ZYDIS_MNEMONIC_VMULPD, - ZYDIS_MNEMONIC_VMULPS, - ZYDIS_MNEMONIC_VMULSD, - ZYDIS_MNEMONIC_VMULSS, - ZYDIS_MNEMONIC_VMWRITE, - ZYDIS_MNEMONIC_VMXOFF, - ZYDIS_MNEMONIC_VMXON, - ZYDIS_MNEMONIC_VORPD, - ZYDIS_MNEMONIC_VORPS, - ZYDIS_MNEMONIC_VP4DPWSSD, - ZYDIS_MNEMONIC_VP4DPWSSDS, - ZYDIS_MNEMONIC_VPABSB, - ZYDIS_MNEMONIC_VPABSD, - ZYDIS_MNEMONIC_VPABSQ, - ZYDIS_MNEMONIC_VPABSW, - ZYDIS_MNEMONIC_VPACKSSDW, - ZYDIS_MNEMONIC_VPACKSSWB, - ZYDIS_MNEMONIC_VPACKSTOREHD, - ZYDIS_MNEMONIC_VPACKSTOREHPD, - ZYDIS_MNEMONIC_VPACKSTOREHPS, - ZYDIS_MNEMONIC_VPACKSTOREHQ, - ZYDIS_MNEMONIC_VPACKSTORELD, - ZYDIS_MNEMONIC_VPACKSTORELPD, - ZYDIS_MNEMONIC_VPACKSTORELPS, - ZYDIS_MNEMONIC_VPACKSTORELQ, - ZYDIS_MNEMONIC_VPACKUSDW, - ZYDIS_MNEMONIC_VPACKUSWB, - ZYDIS_MNEMONIC_VPADCD, - ZYDIS_MNEMONIC_VPADDB, - ZYDIS_MNEMONIC_VPADDD, - ZYDIS_MNEMONIC_VPADDQ, - ZYDIS_MNEMONIC_VPADDSB, - ZYDIS_MNEMONIC_VPADDSETCD, - ZYDIS_MNEMONIC_VPADDSETSD, - ZYDIS_MNEMONIC_VPADDSW, - ZYDIS_MNEMONIC_VPADDUSB, - ZYDIS_MNEMONIC_VPADDUSW, - ZYDIS_MNEMONIC_VPADDW, - ZYDIS_MNEMONIC_VPALIGNR, - ZYDIS_MNEMONIC_VPAND, - ZYDIS_MNEMONIC_VPANDD, - ZYDIS_MNEMONIC_VPANDN, - ZYDIS_MNEMONIC_VPANDND, - ZYDIS_MNEMONIC_VPANDNQ, - ZYDIS_MNEMONIC_VPANDQ, - ZYDIS_MNEMONIC_VPAVGB, - ZYDIS_MNEMONIC_VPAVGW, - ZYDIS_MNEMONIC_VPBLENDD, - ZYDIS_MNEMONIC_VPBLENDMB, - ZYDIS_MNEMONIC_VPBLENDMD, - ZYDIS_MNEMONIC_VPBLENDMQ, - ZYDIS_MNEMONIC_VPBLENDMW, - ZYDIS_MNEMONIC_VPBLENDVB, - ZYDIS_MNEMONIC_VPBLENDW, - ZYDIS_MNEMONIC_VPBROADCASTB, - ZYDIS_MNEMONIC_VPBROADCASTD, - ZYDIS_MNEMONIC_VPBROADCASTMB2Q, - ZYDIS_MNEMONIC_VPBROADCASTMW2D, - ZYDIS_MNEMONIC_VPBROADCASTQ, - ZYDIS_MNEMONIC_VPBROADCASTW, - ZYDIS_MNEMONIC_VPCLMULQDQ, - ZYDIS_MNEMONIC_VPCMOV, - ZYDIS_MNEMONIC_VPCMPB, - ZYDIS_MNEMONIC_VPCMPD, - ZYDIS_MNEMONIC_VPCMPEQB, - ZYDIS_MNEMONIC_VPCMPEQD, - ZYDIS_MNEMONIC_VPCMPEQQ, - ZYDIS_MNEMONIC_VPCMPEQW, - ZYDIS_MNEMONIC_VPCMPESTRI, - ZYDIS_MNEMONIC_VPCMPESTRM, - ZYDIS_MNEMONIC_VPCMPGTB, - ZYDIS_MNEMONIC_VPCMPGTD, - ZYDIS_MNEMONIC_VPCMPGTQ, - ZYDIS_MNEMONIC_VPCMPGTW, - ZYDIS_MNEMONIC_VPCMPISTRI, - ZYDIS_MNEMONIC_VPCMPISTRM, - ZYDIS_MNEMONIC_VPCMPLTD, - ZYDIS_MNEMONIC_VPCMPQ, - ZYDIS_MNEMONIC_VPCMPUB, - ZYDIS_MNEMONIC_VPCMPUD, - ZYDIS_MNEMONIC_VPCMPUQ, - ZYDIS_MNEMONIC_VPCMPUW, - ZYDIS_MNEMONIC_VPCMPW, - ZYDIS_MNEMONIC_VPCOMB, - ZYDIS_MNEMONIC_VPCOMD, - ZYDIS_MNEMONIC_VPCOMPRESSB, - ZYDIS_MNEMONIC_VPCOMPRESSD, - ZYDIS_MNEMONIC_VPCOMPRESSQ, - ZYDIS_MNEMONIC_VPCOMPRESSW, - ZYDIS_MNEMONIC_VPCOMQ, - ZYDIS_MNEMONIC_VPCOMUB, - ZYDIS_MNEMONIC_VPCOMUD, - ZYDIS_MNEMONIC_VPCOMUQ, - ZYDIS_MNEMONIC_VPCOMUW, - ZYDIS_MNEMONIC_VPCOMW, - ZYDIS_MNEMONIC_VPCONFLICTD, - ZYDIS_MNEMONIC_VPCONFLICTQ, - ZYDIS_MNEMONIC_VPDPBUSD, - ZYDIS_MNEMONIC_VPDPBUSDS, - ZYDIS_MNEMONIC_VPDPWSSD, - ZYDIS_MNEMONIC_VPDPWSSDS, - ZYDIS_MNEMONIC_VPERM2F128, - ZYDIS_MNEMONIC_VPERM2I128, - ZYDIS_MNEMONIC_VPERMB, - ZYDIS_MNEMONIC_VPERMD, - ZYDIS_MNEMONIC_VPERMF32X4, - ZYDIS_MNEMONIC_VPERMI2B, - ZYDIS_MNEMONIC_VPERMI2D, - ZYDIS_MNEMONIC_VPERMI2PD, - ZYDIS_MNEMONIC_VPERMI2PS, - ZYDIS_MNEMONIC_VPERMI2Q, - ZYDIS_MNEMONIC_VPERMI2W, - ZYDIS_MNEMONIC_VPERMIL2PD, - ZYDIS_MNEMONIC_VPERMIL2PS, - ZYDIS_MNEMONIC_VPERMILPD, - ZYDIS_MNEMONIC_VPERMILPS, - ZYDIS_MNEMONIC_VPERMPD, - ZYDIS_MNEMONIC_VPERMPS, - ZYDIS_MNEMONIC_VPERMQ, - ZYDIS_MNEMONIC_VPERMT2B, - ZYDIS_MNEMONIC_VPERMT2D, - ZYDIS_MNEMONIC_VPERMT2PD, - ZYDIS_MNEMONIC_VPERMT2PS, - ZYDIS_MNEMONIC_VPERMT2Q, - ZYDIS_MNEMONIC_VPERMT2W, - ZYDIS_MNEMONIC_VPERMW, - ZYDIS_MNEMONIC_VPEXPANDB, - ZYDIS_MNEMONIC_VPEXPANDD, - ZYDIS_MNEMONIC_VPEXPANDQ, - ZYDIS_MNEMONIC_VPEXPANDW, - ZYDIS_MNEMONIC_VPEXTRB, - ZYDIS_MNEMONIC_VPEXTRD, - ZYDIS_MNEMONIC_VPEXTRQ, - ZYDIS_MNEMONIC_VPEXTRW, - ZYDIS_MNEMONIC_VPGATHERDD, - ZYDIS_MNEMONIC_VPGATHERDQ, - ZYDIS_MNEMONIC_VPGATHERQD, - ZYDIS_MNEMONIC_VPGATHERQQ, - ZYDIS_MNEMONIC_VPHADDBD, - ZYDIS_MNEMONIC_VPHADDBQ, - ZYDIS_MNEMONIC_VPHADDBW, - ZYDIS_MNEMONIC_VPHADDD, - ZYDIS_MNEMONIC_VPHADDDQ, - ZYDIS_MNEMONIC_VPHADDSW, - ZYDIS_MNEMONIC_VPHADDUBD, - ZYDIS_MNEMONIC_VPHADDUBQ, - ZYDIS_MNEMONIC_VPHADDUBW, - ZYDIS_MNEMONIC_VPHADDUDQ, - ZYDIS_MNEMONIC_VPHADDUWD, - ZYDIS_MNEMONIC_VPHADDUWQ, - ZYDIS_MNEMONIC_VPHADDW, - ZYDIS_MNEMONIC_VPHADDWD, - ZYDIS_MNEMONIC_VPHADDWQ, - ZYDIS_MNEMONIC_VPHMINPOSUW, - ZYDIS_MNEMONIC_VPHSUBBW, - ZYDIS_MNEMONIC_VPHSUBD, - ZYDIS_MNEMONIC_VPHSUBDQ, - ZYDIS_MNEMONIC_VPHSUBSW, - ZYDIS_MNEMONIC_VPHSUBW, - ZYDIS_MNEMONIC_VPHSUBWD, - ZYDIS_MNEMONIC_VPINSRB, - ZYDIS_MNEMONIC_VPINSRD, - ZYDIS_MNEMONIC_VPINSRQ, - ZYDIS_MNEMONIC_VPINSRW, - ZYDIS_MNEMONIC_VPLZCNTD, - ZYDIS_MNEMONIC_VPLZCNTQ, - ZYDIS_MNEMONIC_VPMACSDD, - ZYDIS_MNEMONIC_VPMACSDQH, - ZYDIS_MNEMONIC_VPMACSDQL, - ZYDIS_MNEMONIC_VPMACSSDD, - ZYDIS_MNEMONIC_VPMACSSDQH, - ZYDIS_MNEMONIC_VPMACSSDQL, - ZYDIS_MNEMONIC_VPMACSSWD, - ZYDIS_MNEMONIC_VPMACSSWW, - ZYDIS_MNEMONIC_VPMACSWD, - ZYDIS_MNEMONIC_VPMACSWW, - ZYDIS_MNEMONIC_VPMADCSSWD, - ZYDIS_MNEMONIC_VPMADCSWD, - ZYDIS_MNEMONIC_VPMADD231D, - ZYDIS_MNEMONIC_VPMADD233D, - ZYDIS_MNEMONIC_VPMADD52HUQ, - ZYDIS_MNEMONIC_VPMADD52LUQ, - ZYDIS_MNEMONIC_VPMADDUBSW, - ZYDIS_MNEMONIC_VPMADDWD, - ZYDIS_MNEMONIC_VPMASKMOVD, - ZYDIS_MNEMONIC_VPMASKMOVQ, - ZYDIS_MNEMONIC_VPMAXSB, - ZYDIS_MNEMONIC_VPMAXSD, - ZYDIS_MNEMONIC_VPMAXSQ, - ZYDIS_MNEMONIC_VPMAXSW, - ZYDIS_MNEMONIC_VPMAXUB, - ZYDIS_MNEMONIC_VPMAXUD, - ZYDIS_MNEMONIC_VPMAXUQ, - ZYDIS_MNEMONIC_VPMAXUW, - ZYDIS_MNEMONIC_VPMINSB, - ZYDIS_MNEMONIC_VPMINSD, - ZYDIS_MNEMONIC_VPMINSQ, - ZYDIS_MNEMONIC_VPMINSW, - ZYDIS_MNEMONIC_VPMINUB, - ZYDIS_MNEMONIC_VPMINUD, - ZYDIS_MNEMONIC_VPMINUQ, - ZYDIS_MNEMONIC_VPMINUW, - ZYDIS_MNEMONIC_VPMOVB2M, - ZYDIS_MNEMONIC_VPMOVD2M, - ZYDIS_MNEMONIC_VPMOVDB, - ZYDIS_MNEMONIC_VPMOVDW, - ZYDIS_MNEMONIC_VPMOVM2B, - ZYDIS_MNEMONIC_VPMOVM2D, - ZYDIS_MNEMONIC_VPMOVM2Q, - ZYDIS_MNEMONIC_VPMOVM2W, - ZYDIS_MNEMONIC_VPMOVMSKB, - ZYDIS_MNEMONIC_VPMOVQ2M, - ZYDIS_MNEMONIC_VPMOVQB, - ZYDIS_MNEMONIC_VPMOVQD, - ZYDIS_MNEMONIC_VPMOVQW, - ZYDIS_MNEMONIC_VPMOVSDB, - ZYDIS_MNEMONIC_VPMOVSDW, - ZYDIS_MNEMONIC_VPMOVSQB, - ZYDIS_MNEMONIC_VPMOVSQD, - ZYDIS_MNEMONIC_VPMOVSQW, - ZYDIS_MNEMONIC_VPMOVSWB, - ZYDIS_MNEMONIC_VPMOVSXBD, - ZYDIS_MNEMONIC_VPMOVSXBQ, - ZYDIS_MNEMONIC_VPMOVSXBW, - ZYDIS_MNEMONIC_VPMOVSXDQ, - ZYDIS_MNEMONIC_VPMOVSXWD, - ZYDIS_MNEMONIC_VPMOVSXWQ, - ZYDIS_MNEMONIC_VPMOVUSDB, - ZYDIS_MNEMONIC_VPMOVUSDW, - ZYDIS_MNEMONIC_VPMOVUSQB, - ZYDIS_MNEMONIC_VPMOVUSQD, - ZYDIS_MNEMONIC_VPMOVUSQW, - ZYDIS_MNEMONIC_VPMOVUSWB, - ZYDIS_MNEMONIC_VPMOVW2M, - ZYDIS_MNEMONIC_VPMOVWB, - ZYDIS_MNEMONIC_VPMOVZXBD, - ZYDIS_MNEMONIC_VPMOVZXBQ, - ZYDIS_MNEMONIC_VPMOVZXBW, - ZYDIS_MNEMONIC_VPMOVZXDQ, - ZYDIS_MNEMONIC_VPMOVZXWD, - ZYDIS_MNEMONIC_VPMOVZXWQ, - ZYDIS_MNEMONIC_VPMULDQ, - ZYDIS_MNEMONIC_VPMULHD, - ZYDIS_MNEMONIC_VPMULHRSW, - ZYDIS_MNEMONIC_VPMULHUD, - ZYDIS_MNEMONIC_VPMULHUW, - ZYDIS_MNEMONIC_VPMULHW, - ZYDIS_MNEMONIC_VPMULLD, - ZYDIS_MNEMONIC_VPMULLQ, - ZYDIS_MNEMONIC_VPMULLW, - ZYDIS_MNEMONIC_VPMULTISHIFTQB, - ZYDIS_MNEMONIC_VPMULUDQ, - ZYDIS_MNEMONIC_VPOPCNTB, - ZYDIS_MNEMONIC_VPOPCNTD, - ZYDIS_MNEMONIC_VPOPCNTQ, - ZYDIS_MNEMONIC_VPOPCNTW, - ZYDIS_MNEMONIC_VPOR, - ZYDIS_MNEMONIC_VPORD, - ZYDIS_MNEMONIC_VPORQ, - ZYDIS_MNEMONIC_VPPERM, - ZYDIS_MNEMONIC_VPREFETCH0, - ZYDIS_MNEMONIC_VPREFETCH1, - ZYDIS_MNEMONIC_VPREFETCH2, - ZYDIS_MNEMONIC_VPREFETCHE0, - ZYDIS_MNEMONIC_VPREFETCHE1, - ZYDIS_MNEMONIC_VPREFETCHE2, - ZYDIS_MNEMONIC_VPREFETCHENTA, - ZYDIS_MNEMONIC_VPREFETCHNTA, - ZYDIS_MNEMONIC_VPROLD, - ZYDIS_MNEMONIC_VPROLQ, - ZYDIS_MNEMONIC_VPROLVD, - ZYDIS_MNEMONIC_VPROLVQ, - ZYDIS_MNEMONIC_VPRORD, - ZYDIS_MNEMONIC_VPRORQ, - ZYDIS_MNEMONIC_VPRORVD, - ZYDIS_MNEMONIC_VPRORVQ, - ZYDIS_MNEMONIC_VPROTB, - ZYDIS_MNEMONIC_VPROTD, - ZYDIS_MNEMONIC_VPROTQ, - ZYDIS_MNEMONIC_VPROTW, - ZYDIS_MNEMONIC_VPSADBW, - ZYDIS_MNEMONIC_VPSBBD, - ZYDIS_MNEMONIC_VPSBBRD, - ZYDIS_MNEMONIC_VPSCATTERDD, - ZYDIS_MNEMONIC_VPSCATTERDQ, - ZYDIS_MNEMONIC_VPSCATTERQD, - ZYDIS_MNEMONIC_VPSCATTERQQ, - ZYDIS_MNEMONIC_VPSHAB, - ZYDIS_MNEMONIC_VPSHAD, - ZYDIS_MNEMONIC_VPSHAQ, - ZYDIS_MNEMONIC_VPSHAW, - ZYDIS_MNEMONIC_VPSHLB, - ZYDIS_MNEMONIC_VPSHLD, - ZYDIS_MNEMONIC_VPSHLDD, - ZYDIS_MNEMONIC_VPSHLDQ, - ZYDIS_MNEMONIC_VPSHLDVD, - ZYDIS_MNEMONIC_VPSHLDVQ, - ZYDIS_MNEMONIC_VPSHLDVW, - ZYDIS_MNEMONIC_VPSHLDW, - ZYDIS_MNEMONIC_VPSHLQ, - ZYDIS_MNEMONIC_VPSHLW, - ZYDIS_MNEMONIC_VPSHRDD, - ZYDIS_MNEMONIC_VPSHRDQ, - ZYDIS_MNEMONIC_VPSHRDVD, - ZYDIS_MNEMONIC_VPSHRDVQ, - ZYDIS_MNEMONIC_VPSHRDVW, - ZYDIS_MNEMONIC_VPSHRDW, - ZYDIS_MNEMONIC_VPSHUFB, - ZYDIS_MNEMONIC_VPSHUFBITQMB, - ZYDIS_MNEMONIC_VPSHUFD, - ZYDIS_MNEMONIC_VPSHUFHW, - ZYDIS_MNEMONIC_VPSHUFLW, - ZYDIS_MNEMONIC_VPSIGNB, - ZYDIS_MNEMONIC_VPSIGND, - ZYDIS_MNEMONIC_VPSIGNW, - ZYDIS_MNEMONIC_VPSLLD, - ZYDIS_MNEMONIC_VPSLLDQ, - ZYDIS_MNEMONIC_VPSLLQ, - ZYDIS_MNEMONIC_VPSLLVD, - ZYDIS_MNEMONIC_VPSLLVQ, - ZYDIS_MNEMONIC_VPSLLVW, - ZYDIS_MNEMONIC_VPSLLW, - ZYDIS_MNEMONIC_VPSRAD, - ZYDIS_MNEMONIC_VPSRAQ, - ZYDIS_MNEMONIC_VPSRAVD, - ZYDIS_MNEMONIC_VPSRAVQ, - ZYDIS_MNEMONIC_VPSRAVW, - ZYDIS_MNEMONIC_VPSRAW, - ZYDIS_MNEMONIC_VPSRLD, - ZYDIS_MNEMONIC_VPSRLDQ, - ZYDIS_MNEMONIC_VPSRLQ, - ZYDIS_MNEMONIC_VPSRLVD, - ZYDIS_MNEMONIC_VPSRLVQ, - ZYDIS_MNEMONIC_VPSRLVW, - ZYDIS_MNEMONIC_VPSRLW, - ZYDIS_MNEMONIC_VPSUBB, - ZYDIS_MNEMONIC_VPSUBD, - ZYDIS_MNEMONIC_VPSUBQ, - ZYDIS_MNEMONIC_VPSUBRD, - ZYDIS_MNEMONIC_VPSUBRSETBD, - ZYDIS_MNEMONIC_VPSUBSB, - ZYDIS_MNEMONIC_VPSUBSETBD, - ZYDIS_MNEMONIC_VPSUBSW, - ZYDIS_MNEMONIC_VPSUBUSB, - ZYDIS_MNEMONIC_VPSUBUSW, - ZYDIS_MNEMONIC_VPSUBW, - ZYDIS_MNEMONIC_VPTERNLOGD, - ZYDIS_MNEMONIC_VPTERNLOGQ, - ZYDIS_MNEMONIC_VPTEST, - ZYDIS_MNEMONIC_VPTESTMB, - ZYDIS_MNEMONIC_VPTESTMD, - ZYDIS_MNEMONIC_VPTESTMQ, - ZYDIS_MNEMONIC_VPTESTMW, - ZYDIS_MNEMONIC_VPTESTNMB, - ZYDIS_MNEMONIC_VPTESTNMD, - ZYDIS_MNEMONIC_VPTESTNMQ, - ZYDIS_MNEMONIC_VPTESTNMW, - ZYDIS_MNEMONIC_VPUNPCKHBW, - ZYDIS_MNEMONIC_VPUNPCKHDQ, - ZYDIS_MNEMONIC_VPUNPCKHQDQ, - ZYDIS_MNEMONIC_VPUNPCKHWD, - ZYDIS_MNEMONIC_VPUNPCKLBW, - ZYDIS_MNEMONIC_VPUNPCKLDQ, - ZYDIS_MNEMONIC_VPUNPCKLQDQ, - ZYDIS_MNEMONIC_VPUNPCKLWD, - ZYDIS_MNEMONIC_VPXOR, - ZYDIS_MNEMONIC_VPXORD, - ZYDIS_MNEMONIC_VPXORQ, - ZYDIS_MNEMONIC_VRANGEPD, - ZYDIS_MNEMONIC_VRANGEPS, - ZYDIS_MNEMONIC_VRANGESD, - ZYDIS_MNEMONIC_VRANGESS, - ZYDIS_MNEMONIC_VRCP14PD, - ZYDIS_MNEMONIC_VRCP14PS, - ZYDIS_MNEMONIC_VRCP14SD, - ZYDIS_MNEMONIC_VRCP14SS, - ZYDIS_MNEMONIC_VRCP23PS, - ZYDIS_MNEMONIC_VRCP28PD, - ZYDIS_MNEMONIC_VRCP28PS, - ZYDIS_MNEMONIC_VRCP28SD, - ZYDIS_MNEMONIC_VRCP28SS, - ZYDIS_MNEMONIC_VRCPPS, - ZYDIS_MNEMONIC_VRCPSS, - ZYDIS_MNEMONIC_VREDUCEPD, - ZYDIS_MNEMONIC_VREDUCEPS, - ZYDIS_MNEMONIC_VREDUCESD, - ZYDIS_MNEMONIC_VREDUCESS, - ZYDIS_MNEMONIC_VRNDFXPNTPD, - ZYDIS_MNEMONIC_VRNDFXPNTPS, - ZYDIS_MNEMONIC_VRNDSCALEPD, - ZYDIS_MNEMONIC_VRNDSCALEPS, - ZYDIS_MNEMONIC_VRNDSCALESD, - ZYDIS_MNEMONIC_VRNDSCALESS, - ZYDIS_MNEMONIC_VROUNDPD, - ZYDIS_MNEMONIC_VROUNDPS, - ZYDIS_MNEMONIC_VROUNDSD, - ZYDIS_MNEMONIC_VROUNDSS, - ZYDIS_MNEMONIC_VRSQRT14PD, - ZYDIS_MNEMONIC_VRSQRT14PS, - ZYDIS_MNEMONIC_VRSQRT14SD, - ZYDIS_MNEMONIC_VRSQRT14SS, - ZYDIS_MNEMONIC_VRSQRT23PS, - ZYDIS_MNEMONIC_VRSQRT28PD, - ZYDIS_MNEMONIC_VRSQRT28PS, - ZYDIS_MNEMONIC_VRSQRT28SD, - ZYDIS_MNEMONIC_VRSQRT28SS, - ZYDIS_MNEMONIC_VRSQRTPS, - ZYDIS_MNEMONIC_VRSQRTSS, - ZYDIS_MNEMONIC_VSCALEFPD, - ZYDIS_MNEMONIC_VSCALEFPS, - ZYDIS_MNEMONIC_VSCALEFSD, - ZYDIS_MNEMONIC_VSCALEFSS, - ZYDIS_MNEMONIC_VSCALEPS, - ZYDIS_MNEMONIC_VSCATTERDPD, - ZYDIS_MNEMONIC_VSCATTERDPS, - ZYDIS_MNEMONIC_VSCATTERPF0DPD, - ZYDIS_MNEMONIC_VSCATTERPF0DPS, - ZYDIS_MNEMONIC_VSCATTERPF0HINTDPD, - ZYDIS_MNEMONIC_VSCATTERPF0HINTDPS, - ZYDIS_MNEMONIC_VSCATTERPF0QPD, - ZYDIS_MNEMONIC_VSCATTERPF0QPS, - ZYDIS_MNEMONIC_VSCATTERPF1DPD, - ZYDIS_MNEMONIC_VSCATTERPF1DPS, - ZYDIS_MNEMONIC_VSCATTERPF1QPD, - ZYDIS_MNEMONIC_VSCATTERPF1QPS, - ZYDIS_MNEMONIC_VSCATTERQPD, - ZYDIS_MNEMONIC_VSCATTERQPS, - ZYDIS_MNEMONIC_VSHUFF32X4, - ZYDIS_MNEMONIC_VSHUFF64X2, - ZYDIS_MNEMONIC_VSHUFI32X4, - ZYDIS_MNEMONIC_VSHUFI64X2, - ZYDIS_MNEMONIC_VSHUFPD, - ZYDIS_MNEMONIC_VSHUFPS, - ZYDIS_MNEMONIC_VSQRTPD, - ZYDIS_MNEMONIC_VSQRTPS, - ZYDIS_MNEMONIC_VSQRTSD, - ZYDIS_MNEMONIC_VSQRTSS, - ZYDIS_MNEMONIC_VSTMXCSR, - ZYDIS_MNEMONIC_VSUBPD, - ZYDIS_MNEMONIC_VSUBPS, - ZYDIS_MNEMONIC_VSUBRPD, - ZYDIS_MNEMONIC_VSUBRPS, - ZYDIS_MNEMONIC_VSUBSD, - ZYDIS_MNEMONIC_VSUBSS, - ZYDIS_MNEMONIC_VTESTPD, - ZYDIS_MNEMONIC_VTESTPS, - ZYDIS_MNEMONIC_VUCOMISD, - ZYDIS_MNEMONIC_VUCOMISS, - ZYDIS_MNEMONIC_VUNPCKHPD, - ZYDIS_MNEMONIC_VUNPCKHPS, - ZYDIS_MNEMONIC_VUNPCKLPD, - ZYDIS_MNEMONIC_VUNPCKLPS, - ZYDIS_MNEMONIC_VXORPD, - ZYDIS_MNEMONIC_VXORPS, - ZYDIS_MNEMONIC_VZEROALL, - ZYDIS_MNEMONIC_VZEROUPPER, - ZYDIS_MNEMONIC_WBINVD, - ZYDIS_MNEMONIC_WRFSBASE, - ZYDIS_MNEMONIC_WRGSBASE, - ZYDIS_MNEMONIC_WRMSR, - ZYDIS_MNEMONIC_WRPKRU, - ZYDIS_MNEMONIC_WRSSD, - ZYDIS_MNEMONIC_WRSSQ, - ZYDIS_MNEMONIC_WRUSSD, - ZYDIS_MNEMONIC_WRUSSQ, - ZYDIS_MNEMONIC_XABORT, - ZYDIS_MNEMONIC_XADD, - ZYDIS_MNEMONIC_XBEGIN, - ZYDIS_MNEMONIC_XCHG, - ZYDIS_MNEMONIC_XCRYPT_CBC, - ZYDIS_MNEMONIC_XCRYPT_CFB, - ZYDIS_MNEMONIC_XCRYPT_CTR, - ZYDIS_MNEMONIC_XCRYPT_ECB, - ZYDIS_MNEMONIC_XCRYPT_OFB, - ZYDIS_MNEMONIC_XEND, - ZYDIS_MNEMONIC_XGETBV, - ZYDIS_MNEMONIC_XLAT, - ZYDIS_MNEMONIC_XOR, - ZYDIS_MNEMONIC_XORPD, - ZYDIS_MNEMONIC_XORPS, - ZYDIS_MNEMONIC_XRSTOR, - ZYDIS_MNEMONIC_XRSTOR64, - ZYDIS_MNEMONIC_XRSTORS, - ZYDIS_MNEMONIC_XRSTORS64, - ZYDIS_MNEMONIC_XSAVE, - ZYDIS_MNEMONIC_XSAVE64, - ZYDIS_MNEMONIC_XSAVEC, - ZYDIS_MNEMONIC_XSAVEC64, - ZYDIS_MNEMONIC_XSAVEOPT, - ZYDIS_MNEMONIC_XSAVEOPT64, - ZYDIS_MNEMONIC_XSAVES, - ZYDIS_MNEMONIC_XSAVES64, - ZYDIS_MNEMONIC_XSETBV, - ZYDIS_MNEMONIC_XSHA1, - ZYDIS_MNEMONIC_XSHA256, - ZYDIS_MNEMONIC_XSTORE, - ZYDIS_MNEMONIC_XTEST, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_MNEMONIC_MAX_VALUE = ZYDIS_MNEMONIC_XTEST, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_MNEMONIC_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_MNEMONIC_MAX_VALUE) -} ZydisMnemonic; -/** - * @brief Defines the `ZydisOperandType` enum. - */ -typedef enum ZydisOperandType_ -{ - /** - * @brief The operand is not used. - */ - ZYDIS_OPERAND_TYPE_UNUSED, - /** - * @brief The operand is a register operand. - */ - ZYDIS_OPERAND_TYPE_REGISTER, - /** - * @brief The operand is a memory operand. - */ - ZYDIS_OPERAND_TYPE_MEMORY, - /** - * @brief The operand is a pointer operand with a segment:offset lvalue. - */ - ZYDIS_OPERAND_TYPE_POINTER, - /** - * @brief The operand is an immediate operand. - */ - ZYDIS_OPERAND_TYPE_IMMEDIATE, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_OPERAND_TYPE_MAX_VALUE = ZYDIS_OPERAND_TYPE_IMMEDIATE, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_OPERAND_TYPE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_OPERAND_TYPE_MAX_VALUE) -} ZydisOperandType; -/** - * @brief Defines the `ZydisElementSize` datatype. - */ -typedef ZyanU16 ZydisElementSize; -/** - * @brief Defines the `ZydisInstructionAttributes` datatype. - */ -typedef ZyanU64 ZydisInstructionAttributes; -/** - * @brief Defines the `ZydisOperandEncoding` enum. - */ -typedef enum ZydisOperandEncoding_ -{ - ZYDIS_OPERAND_ENCODING_NONE, - ZYDIS_OPERAND_ENCODING_MODRM_REG, - ZYDIS_OPERAND_ENCODING_MODRM_RM, - ZYDIS_OPERAND_ENCODING_OPCODE, - ZYDIS_OPERAND_ENCODING_NDSNDD, - ZYDIS_OPERAND_ENCODING_IS4, - ZYDIS_OPERAND_ENCODING_MASK, - ZYDIS_OPERAND_ENCODING_DISP8, - ZYDIS_OPERAND_ENCODING_DISP16, - ZYDIS_OPERAND_ENCODING_DISP32, - ZYDIS_OPERAND_ENCODING_DISP64, - ZYDIS_OPERAND_ENCODING_DISP16_32_64, - ZYDIS_OPERAND_ENCODING_DISP32_32_64, - ZYDIS_OPERAND_ENCODING_DISP16_32_32, - ZYDIS_OPERAND_ENCODING_UIMM8, - ZYDIS_OPERAND_ENCODING_UIMM16, - ZYDIS_OPERAND_ENCODING_UIMM32, - ZYDIS_OPERAND_ENCODING_UIMM64, - ZYDIS_OPERAND_ENCODING_UIMM16_32_64, - ZYDIS_OPERAND_ENCODING_UIMM32_32_64, - ZYDIS_OPERAND_ENCODING_UIMM16_32_32, - ZYDIS_OPERAND_ENCODING_SIMM8, - ZYDIS_OPERAND_ENCODING_SIMM16, - ZYDIS_OPERAND_ENCODING_SIMM32, - ZYDIS_OPERAND_ENCODING_SIMM64, - ZYDIS_OPERAND_ENCODING_SIMM16_32_64, - ZYDIS_OPERAND_ENCODING_SIMM32_32_64, - ZYDIS_OPERAND_ENCODING_SIMM16_32_32, - ZYDIS_OPERAND_ENCODING_JIMM8, - ZYDIS_OPERAND_ENCODING_JIMM16, - ZYDIS_OPERAND_ENCODING_JIMM32, - ZYDIS_OPERAND_ENCODING_JIMM64, - ZYDIS_OPERAND_ENCODING_JIMM16_32_64, - ZYDIS_OPERAND_ENCODING_JIMM32_32_64, - ZYDIS_OPERAND_ENCODING_JIMM16_32_32, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_OPERAND_ENCODING_MAX_VALUE = ZYDIS_OPERAND_ENCODING_JIMM16_32_32, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_OPERAND_ENCODING_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_OPERAND_ENCODING_MAX_VALUE) -} ZydisOperandEncoding; -/** - * @brief Defines the `ZydisOperandVisibility` enum. - */ -typedef enum ZydisOperandVisibility_ -{ - ZYDIS_OPERAND_VISIBILITY_INVALID, - /** - * @brief The operand is explicitly encoded in the instruction. - */ - ZYDIS_OPERAND_VISIBILITY_EXPLICIT, - /** - * @brief The operand is part of the opcode, but listed as an operand. - */ - ZYDIS_OPERAND_VISIBILITY_IMPLICIT, - /** - * @brief The operand is part of the opcode, and not typically listed as an operand. - */ - ZYDIS_OPERAND_VISIBILITY_HIDDEN, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_OPERAND_VISIBILITY_MAX_VALUE = ZYDIS_OPERAND_VISIBILITY_HIDDEN, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_OPERAND_VISIBILITY_REQUIRED_BITS = - ZYAN_BITS_TO_REPRESENT(ZYDIS_OPERAND_VISIBILITY_MAX_VALUE) -} ZydisOperandVisibility; -/** - * @brief Defines the `ZydisOperandAction` enum. - */ -typedef enum ZydisOperandAction_ -{ - /* ------------------------------------------------------------------------------------------ */ - /* Elemental actions */ - /* ------------------------------------------------------------------------------------------ */ - - /** - * @brief The operand is read by the instruction. - */ - ZYDIS_OPERAND_ACTION_READ = 0x01, - /** - * @brief The operand is written by the instruction (must write). - */ - ZYDIS_OPERAND_ACTION_WRITE = 0x02, - /** - * @brief The operand is conditionally read by the instruction. - */ - ZYDIS_OPERAND_ACTION_CONDREAD = 0x04, - /** - * @brief The operand is conditionally written by the instruction (may write). - */ - ZYDIS_OPERAND_ACTION_CONDWRITE = 0x08, - - /* ------------------------------------------------------------------------------------------ */ - /* Combined actions */ - /* ------------------------------------------------------------------------------------------ */ - - /** - * @brief The operand is read (must read) and written by the instruction (must write). - */ - ZYDIS_OPERAND_ACTION_READWRITE = ZYDIS_OPERAND_ACTION_READ | ZYDIS_OPERAND_ACTION_WRITE, - /** - * @brief The operand is conditionally read (may read) and conditionally written by the - * instruction (may write). - */ - ZYDIS_OPERAND_ACTION_CONDREAD_CONDWRITE = - ZYDIS_OPERAND_ACTION_CONDREAD | ZYDIS_OPERAND_ACTION_CONDWRITE, - /** - * @brief The operand is read (must read) and conditionally written by the instruction - * (may write). - */ - ZYDIS_OPERAND_ACTION_READ_CONDWRITE = - ZYDIS_OPERAND_ACTION_READ | ZYDIS_OPERAND_ACTION_CONDWRITE, - /** - * @brief The operand is written (must write) and conditionally read by the instruction - * (may read). - */ - ZYDIS_OPERAND_ACTION_CONDREAD_WRITE = - ZYDIS_OPERAND_ACTION_CONDREAD | ZYDIS_OPERAND_ACTION_WRITE, - - /** - * @brief Mask combining all reading access flags. - */ - ZYDIS_OPERAND_ACTION_MASK_READ = ZYDIS_OPERAND_ACTION_READ | ZYDIS_OPERAND_ACTION_CONDREAD, - /** - * @brief Mask combining all writing access flags. - */ - ZYDIS_OPERAND_ACTION_MASK_WRITE = ZYDIS_OPERAND_ACTION_WRITE | ZYDIS_OPERAND_ACTION_CONDWRITE, - - /* ------------------------------------------------------------------------------------------ */ - - /** - * @brief The minimum number of bits required to represent all values of this bitset. - */ - ZYDIS_OPERAND_ACTION_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_OPERAND_ACTION_CONDWRITE) -} ZydisOperandAction; - -/** - * @brief Defines the `ZydisOperandActions` datatype. - */ -typedef ZyanU8 ZydisOperandActions; -/** - * @brief Defines the `ZydisElementType` enum. - */ -typedef enum ZydisElementType_ -{ - ZYDIS_ELEMENT_TYPE_INVALID, - /** - * @brief A struct type. - */ - ZYDIS_ELEMENT_TYPE_STRUCT, - /** - * @brief Unsigned integer value. - */ - ZYDIS_ELEMENT_TYPE_UINT, - /** - * @brief Signed integer value. - */ - ZYDIS_ELEMENT_TYPE_INT, - /** - * @brief 16-bit floating point value (`half`). - */ - ZYDIS_ELEMENT_TYPE_FLOAT16, - /** - * @brief 32-bit floating point value (`single`). - */ - ZYDIS_ELEMENT_TYPE_FLOAT32, - /** - * @brief 64-bit floating point value (`double`). - */ - ZYDIS_ELEMENT_TYPE_FLOAT64, - /** - * @brief 80-bit floating point value (`extended`). - */ - ZYDIS_ELEMENT_TYPE_FLOAT80, - /** - * @brief Binary coded decimal value. - */ - ZYDIS_ELEMENT_TYPE_LONGBCD, - /** - * @brief A condition code (e.g. used by `CMPPD`, `VCMPPD`, ...). - */ - ZYDIS_ELEMENT_TYPE_CC, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_ELEMENT_TYPE_MAX_VALUE = ZYDIS_ELEMENT_TYPE_CC, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_ELEMENT_TYPE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_ELEMENT_TYPE_MAX_VALUE) -} ZydisElementType; -/** - * @brief Defines the `ZydisInstructionEncoding` enum. - */ -typedef enum ZydisInstructionEncoding_ -{ - /** - * @brief The instruction uses the legacy encoding. - */ - ZYDIS_INSTRUCTION_ENCODING_LEGACY, - /** - * @brief The instruction uses the AMD 3DNow-encoding. - */ - ZYDIS_INSTRUCTION_ENCODING_3DNOW, - /** - * @brief The instruction uses the AMD XOP-encoding. - */ - ZYDIS_INSTRUCTION_ENCODING_XOP, - /** - * @brief The instruction uses the VEX-encoding. - */ - ZYDIS_INSTRUCTION_ENCODING_VEX, - /** - * @brief The instruction uses the EVEX-encoding. - */ - ZYDIS_INSTRUCTION_ENCODING_EVEX, - /** - * @brief The instruction uses the MVEX-encoding. - */ - ZYDIS_INSTRUCTION_ENCODING_MVEX, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_INSTRUCTION_ENCODING_MAX_VALUE = ZYDIS_INSTRUCTION_ENCODING_MVEX, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_INSTRUCTION_ENCODING_REQUIRED_BITS = - ZYAN_BITS_TO_REPRESENT(ZYDIS_INSTRUCTION_ENCODING_MAX_VALUE) -} ZydisInstructionEncoding; -/** - * @brief Defines the `ZydisOpcodeMap` enum. - */ -typedef enum ZydisOpcodeMap_ -{ - ZYDIS_OPCODE_MAP_DEFAULT, - ZYDIS_OPCODE_MAP_0F, - ZYDIS_OPCODE_MAP_0F38, - ZYDIS_OPCODE_MAP_0F3A, - ZYDIS_OPCODE_MAP_0F0F, - ZYDIS_OPCODE_MAP_XOP8, - ZYDIS_OPCODE_MAP_XOP9, - ZYDIS_OPCODE_MAP_XOPA, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_OPCODE_MAP_MAX_VALUE = ZYDIS_OPCODE_MAP_XOPA, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_OPCODE_MAP_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_OPCODE_MAP_MAX_VALUE) -} ZydisOpcodeMap; -/** - * @brief Defines the `ZydisMemoryOperandType` enum. - */ -typedef enum ZydisMemoryOperandType_ -{ - ZYDIS_MEMOP_TYPE_INVALID, - /** - * @brief Normal memory operand. - */ - ZYDIS_MEMOP_TYPE_MEM, - /** - * @brief The memory operand is only used for address-generation. No real memory-access is - * caused. - */ - ZYDIS_MEMOP_TYPE_AGEN, - /** - * @brief A memory operand using `SIB` addressing form, where the index register is not used - * in address calculation and scale is ignored. No real memory-access is caused. - */ - ZYDIS_MEMOP_TYPE_MIB, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_MEMOP_TYPE_MAX_VALUE = ZYDIS_MEMOP_TYPE_MIB, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_MEMOP_TYPE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_MEMOP_TYPE_MAX_VALUE) -} ZydisMemoryOperandType; - -/* ---------------------------------------------------------------------------------------------- */ -/* Decoded operand */ -/* ---------------------------------------------------------------------------------------------- */ - -/** - * @brief Defines the `ZydisDecodedOperand` struct. - */ -typedef struct ZydisDecodedOperand_ -{ - /** - * @brief The operand-id. - */ - ZyanU8 id; - /** - * @brief The type of the operand. - */ - ZydisOperandType type; - /** - * @brief The visibility of the operand. - */ - ZydisOperandVisibility visibility; - /** - * @brief The operand-actions. - */ - ZydisOperandActions actions; - /** - * @brief The operand-encoding. - */ - ZydisOperandEncoding encoding; - /** - * @brief The logical size of the operand (in bits). - */ - ZyanU16 size; - /** - * @brief The element-type. - */ - ZydisElementType element_type; - /** - * @brief The size of a single element. - */ - ZydisElementSize element_size; - /** - * @brief The number of elements. - */ - ZyanU16 element_count; - /** - * @brief Extended info for register-operands. - */ - struct - { - /** - * @brief The register value. - */ - ZydisRegister value; - // TODO: AVX512_4VNNIW MULTISOURCE registers - } reg; - /** - * @brief Extended info for memory-operands. - */ - struct - { - /** - * @brief The type of the memory operand. - */ - ZydisMemoryOperandType type; - /** - * @brief The segment register. - */ - ZydisRegister segment; - /** - * @brief The base register. - */ - ZydisRegister base; - /** - * @brief The index register. - */ - ZydisRegister index; - /** - * @brief The scale factor. - */ - ZyanU8 scale; - /** - * @brief Extended info for memory-operands with displacement. - */ - struct - { - /** - * @brief Signals, if the displacement value is used. - */ - ZyanBool has_displacement; - /** - * @brief The displacement value - */ - ZyanI64 value; - } disp; - } mem; - /** - * @brief Extended info for pointer-operands. - */ - struct - { - ZyanU16 segment; - ZyanU32 offset; - } ptr; - /** - * @brief Extended info for immediate-operands. - */ - struct - { - /** - * @brief Signals, if the immediate value is signed. - */ - ZyanBool is_signed; - /** - * @brief Signals, if the immediate value contains a relative offset. You can use - * `ZydisCalcAbsoluteAddress` to determine the absolute address value. - */ - ZyanBool is_relative; - /** - * @brief The immediate value. - */ - union - { - ZyanU64 u; - ZyanI64 s; - } value; - } imm; -} ZydisDecodedOperand; -/** - * Defines the `ZydisCPUFlags` data-type. - */ -typedef ZyanU32 ZydisCPUFlags; - -typedef ZyanU8 ZydisCPUFlag; - -/** - * Carry flag. - */ -#define ZYDIS_CPUFLAG_CF 0 -/** - * Parity flag. - */ -#define ZYDIS_CPUFLAG_PF 2 -/** - * Adjust flag. - */ -#define ZYDIS_CPUFLAG_AF 4 -/** - * Zero flag. - */ -#define ZYDIS_CPUFLAG_ZF 6 -/** - * Sign flag. - */ -#define ZYDIS_CPUFLAG_SF 7 -/** - * Trap flag. - */ -#define ZYDIS_CPUFLAG_TF 8 -/** - * Interrupt enable flag. - */ -#define ZYDIS_CPUFLAG_IF 9 -/** - * Direction flag. - */ -#define ZYDIS_CPUFLAG_DF 10 -/** - * Overflow flag. - */ -#define ZYDIS_CPUFLAG_OF 11 -/** - * I/O privilege level flag. - */ -#define ZYDIS_CPUFLAG_IOPL 12 -/** - * Nested task flag. - */ -#define ZYDIS_CPUFLAG_NT 14 -/** - * Resume flag. - */ -#define ZYDIS_CPUFLAG_RF 16 -/** - * Virtual 8086 mode flag. - */ -#define ZYDIS_CPUFLAG_VM 17 -/** - * Alignment check. - */ -#define ZYDIS_CPUFLAG_AC 18 -/** - * Virtual interrupt flag. - */ -#define ZYDIS_CPUFLAG_VIF 19 -/** - * Virtual interrupt pending. - */ -#define ZYDIS_CPUFLAG_VIP 20 -/** - * Able to use CPUID instruction. - */ -#define ZYDIS_CPUFLAG_ID 21 - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * FPU condition-code flag 0. - * - * DEPRECATED. This flag is not actually part of `FLAGS/EFLAGS/RFLAGS` and will be removed in the - * next major release. Please refer to the `fpu_flags_read`/`fpu_flags_written` field instead and - * use one of the `ZYDIS_FPUFLAG_XXX` masks to check for specific a flag. - */ -#define ZYDIS_CPUFLAG_C0 22 -/** - * FPU condition-code flag 1. - * - * DEPRECATED. This flag is not actually part of `FLAGS/EFLAGS/RFLAGS` and will be removed in the - * next major release. Please refer to the `fpu_flags_read`/`fpu_flags_written` field instead and - * use one of the `ZYDIS_FPUFLAG_XXX` masks to check for specific a flag. - */ -#define ZYDIS_CPUFLAG_C1 23 -/** - * FPU condition-code flag 2. - * - * DEPRECATED. This flag is not actually part of `FLAGS/EFLAGS/RFLAGS` and will be removed in the - * next major release. Please refer to the `fpu_flags_read`/`fpu_flags_written` field instead and - * use one of the `ZYDIS_FPUFLAG_XXX` masks to check for specific a flag. - */ -#define ZYDIS_CPUFLAG_C2 24 -/** - * FPU condition-code flag 3. - * - * DEPRECATED. This flag is not actually part of `FLAGS/EFLAGS/RFLAGS` and will be removed in the - * next major release. Please refer to the `fpu_flags_read`/`fpu_flags_written` field instead and - * use one of the `ZYDIS_FPUFLAG_XXX` masks to check for specific a flag. - */ -#define ZYDIS_CPUFLAG_C3 25 - -/** - * DEPRECATED. This define will be removed in the next major release. - */ -#define ZYDIS_CPUFLAG_MAX_VALUE ZYDIS_CPUFLAG_C3 - -/** - * @brief Defines the `ZydisMaskMode` enum. - */ -typedef enum ZydisMaskMode_ -{ - ZYDIS_MASK_MODE_INVALID, - /** - * @brief Masking is disabled for the current instruction (`K0` register is used). - */ - ZYDIS_MASK_MODE_DISABLED, - /** - * @brief The embedded mask register is used as a merge-mask. - */ - ZYDIS_MASK_MODE_MERGING, - /** - * @brief The embedded mask register is used as a zero-mask. - */ - ZYDIS_MASK_MODE_ZEROING, - /** - * @brief The embedded mask register is used as a control-mask (element selector). - */ - ZYDIS_MASK_MODE_CONTROL, - /** - * @brief The embedded mask register is used as a zeroing control-mask (element selector). - */ - ZYDIS_MASK_MODE_CONTROL_ZEROING, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_MASK_MODE_MAX_VALUE = ZYDIS_MASK_MODE_CONTROL_ZEROING, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_MASK_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_MASK_MODE_MAX_VALUE) -} ZydisMaskMode; -/** - * @brief Defines the `ZydisBroadcastMode` enum. - */ -typedef enum ZydisBroadcastMode_ -{ - ZYDIS_BROADCAST_MODE_INVALID, - ZYDIS_BROADCAST_MODE_1_TO_2, - ZYDIS_BROADCAST_MODE_1_TO_4, - ZYDIS_BROADCAST_MODE_1_TO_8, - ZYDIS_BROADCAST_MODE_1_TO_16, - ZYDIS_BROADCAST_MODE_1_TO_32, - ZYDIS_BROADCAST_MODE_1_TO_64, - ZYDIS_BROADCAST_MODE_2_TO_4, - ZYDIS_BROADCAST_MODE_2_TO_8, - ZYDIS_BROADCAST_MODE_2_TO_16, - ZYDIS_BROADCAST_MODE_4_TO_8, - ZYDIS_BROADCAST_MODE_4_TO_16, - ZYDIS_BROADCAST_MODE_8_TO_16, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_BROADCAST_MODE_MAX_VALUE = ZYDIS_BROADCAST_MODE_8_TO_16, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_BROADCAST_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_BROADCAST_MODE_MAX_VALUE) -} ZydisBroadcastMode; -/** - * @brief Defines the `ZydisRoundingMode` enum. - */ -typedef enum ZydisRoundingMode_ -{ - ZYDIS_ROUNDING_MODE_INVALID, - /** - * @brief Round to nearest. - */ - ZYDIS_ROUNDING_MODE_RN, - /** - * @brief Round down. - */ - ZYDIS_ROUNDING_MODE_RD, - /** - * @brief Round up. - */ - ZYDIS_ROUNDING_MODE_RU, - /** - * @brief Round towards zero. - */ - ZYDIS_ROUNDING_MODE_RZ, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_ROUNDING_MODE_MAX_VALUE = ZYDIS_ROUNDING_MODE_RZ, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_ROUNDING_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_ROUNDING_MODE_MAX_VALUE) -} ZydisRoundingMode; -/** - * @brief Defines the `ZydisSwizzleMode` enum. - */ -typedef enum ZydisSwizzleMode_ -{ - ZYDIS_SWIZZLE_MODE_INVALID, - ZYDIS_SWIZZLE_MODE_DCBA, - ZYDIS_SWIZZLE_MODE_CDAB, - ZYDIS_SWIZZLE_MODE_BADC, - ZYDIS_SWIZZLE_MODE_DACB, - ZYDIS_SWIZZLE_MODE_AAAA, - ZYDIS_SWIZZLE_MODE_BBBB, - ZYDIS_SWIZZLE_MODE_CCCC, - ZYDIS_SWIZZLE_MODE_DDDD, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_SWIZZLE_MODE_MAX_VALUE = ZYDIS_SWIZZLE_MODE_DDDD, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_SWIZZLE_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_SWIZZLE_MODE_MAX_VALUE) -} ZydisSwizzleMode; -/** - * @brief Defines the `ZydisConversionMode` enum. - */ -typedef enum ZydisConversionMode_ -{ - ZYDIS_CONVERSION_MODE_INVALID, - ZYDIS_CONVERSION_MODE_FLOAT16, - ZYDIS_CONVERSION_MODE_SINT8, - ZYDIS_CONVERSION_MODE_UINT8, - ZYDIS_CONVERSION_MODE_SINT16, - ZYDIS_CONVERSION_MODE_UINT16, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_CONVERSION_MODE_MAX_VALUE = ZYDIS_CONVERSION_MODE_UINT16, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_CONVERSION_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_CONVERSION_MODE_MAX_VALUE) -} ZydisConversionMode; -/** - * @brief Defines the `ZydisInstructionCategory` enum. - */ -typedef enum ZydisInstructionCategory_ -{ - ZYDIS_CATEGORY_INVALID, - ZYDIS_CATEGORY_ADOX_ADCX, - ZYDIS_CATEGORY_AES, - ZYDIS_CATEGORY_AMD3DNOW, - ZYDIS_CATEGORY_AVX, - ZYDIS_CATEGORY_AVX2, - ZYDIS_CATEGORY_AVX2GATHER, - ZYDIS_CATEGORY_AVX512, - ZYDIS_CATEGORY_AVX512_4FMAPS, - ZYDIS_CATEGORY_AVX512_4VNNIW, - ZYDIS_CATEGORY_AVX512_BITALG, - ZYDIS_CATEGORY_AVX512_VBMI, - ZYDIS_CATEGORY_BINARY, - ZYDIS_CATEGORY_BITBYTE, - ZYDIS_CATEGORY_BLEND, - ZYDIS_CATEGORY_BMI1, - ZYDIS_CATEGORY_BMI2, - ZYDIS_CATEGORY_BROADCAST, - ZYDIS_CATEGORY_CALL, - ZYDIS_CATEGORY_CET, - ZYDIS_CATEGORY_CLDEMOTE, - ZYDIS_CATEGORY_CLFLUSHOPT, - ZYDIS_CATEGORY_CLWB, - ZYDIS_CATEGORY_CLZERO, - ZYDIS_CATEGORY_CMOV, - ZYDIS_CATEGORY_COMPRESS, - ZYDIS_CATEGORY_COND_BR, - ZYDIS_CATEGORY_CONFLICT, - ZYDIS_CATEGORY_CONVERT, - ZYDIS_CATEGORY_DATAXFER, - ZYDIS_CATEGORY_DECIMAL, - ZYDIS_CATEGORY_EXPAND, - ZYDIS_CATEGORY_FCMOV, - ZYDIS_CATEGORY_FLAGOP, - ZYDIS_CATEGORY_FMA4, - ZYDIS_CATEGORY_GATHER, - ZYDIS_CATEGORY_GFNI, - ZYDIS_CATEGORY_IFMA, - ZYDIS_CATEGORY_INTERRUPT, - ZYDIS_CATEGORY_IO, - ZYDIS_CATEGORY_IOSTRINGOP, - ZYDIS_CATEGORY_KMASK, - ZYDIS_CATEGORY_KNC, - ZYDIS_CATEGORY_KNCMASK, - ZYDIS_CATEGORY_KNCSCALAR, - ZYDIS_CATEGORY_LOGICAL, - ZYDIS_CATEGORY_LOGICAL_FP, - ZYDIS_CATEGORY_LZCNT, - ZYDIS_CATEGORY_MISC, - ZYDIS_CATEGORY_MMX, - ZYDIS_CATEGORY_MOVDIR, - ZYDIS_CATEGORY_MPX, - ZYDIS_CATEGORY_NOP, - ZYDIS_CATEGORY_PADLOCK, - ZYDIS_CATEGORY_PCLMULQDQ, - ZYDIS_CATEGORY_PCONFIG, - ZYDIS_CATEGORY_PKU, - ZYDIS_CATEGORY_POP, - ZYDIS_CATEGORY_PREFETCH, - ZYDIS_CATEGORY_PREFETCHWT1, - ZYDIS_CATEGORY_PT, - ZYDIS_CATEGORY_PUSH, - ZYDIS_CATEGORY_RDPID, - ZYDIS_CATEGORY_RDRAND, - ZYDIS_CATEGORY_RDSEED, - ZYDIS_CATEGORY_RDWRFSGS, - ZYDIS_CATEGORY_RET, - ZYDIS_CATEGORY_ROTATE, - ZYDIS_CATEGORY_SCATTER, - ZYDIS_CATEGORY_SEGOP, - ZYDIS_CATEGORY_SEMAPHORE, - ZYDIS_CATEGORY_SETCC, - ZYDIS_CATEGORY_SGX, - ZYDIS_CATEGORY_SHA, - ZYDIS_CATEGORY_SHIFT, - ZYDIS_CATEGORY_SMAP, - ZYDIS_CATEGORY_SSE, - ZYDIS_CATEGORY_STRINGOP, - ZYDIS_CATEGORY_STTNI, - ZYDIS_CATEGORY_SYSCALL, - ZYDIS_CATEGORY_SYSRET, - ZYDIS_CATEGORY_SYSTEM, - ZYDIS_CATEGORY_TBM, - ZYDIS_CATEGORY_UFMA, - ZYDIS_CATEGORY_UNCOND_BR, - ZYDIS_CATEGORY_VAES, - ZYDIS_CATEGORY_VBMI2, - ZYDIS_CATEGORY_VFMA, - ZYDIS_CATEGORY_VPCLMULQDQ, - ZYDIS_CATEGORY_VTX, - ZYDIS_CATEGORY_WAITPKG, - ZYDIS_CATEGORY_WIDENOP, - ZYDIS_CATEGORY_X87_ALU, - ZYDIS_CATEGORY_XOP, - ZYDIS_CATEGORY_XSAVE, - ZYDIS_CATEGORY_XSAVEOPT, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_CATEGORY_MAX_VALUE = ZYDIS_CATEGORY_XSAVEOPT, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_CATEGORY_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_CATEGORY_MAX_VALUE) -} ZydisInstructionCategory; -/** - * @brief Defines the `ZydisISASet` enum. - */ -typedef enum ZydisISASet_ -{ - ZYDIS_ISA_SET_INVALID, - ZYDIS_ISA_SET_ADOX_ADCX, - ZYDIS_ISA_SET_AES, - ZYDIS_ISA_SET_AMD, - ZYDIS_ISA_SET_AMD3DNOW, - ZYDIS_ISA_SET_AVX, - ZYDIS_ISA_SET_AVX2, - ZYDIS_ISA_SET_AVX2GATHER, - ZYDIS_ISA_SET_AVX512BW_128, - ZYDIS_ISA_SET_AVX512BW_128N, - ZYDIS_ISA_SET_AVX512BW_256, - ZYDIS_ISA_SET_AVX512BW_512, - ZYDIS_ISA_SET_AVX512BW_KOP, - ZYDIS_ISA_SET_AVX512CD_128, - ZYDIS_ISA_SET_AVX512CD_256, - ZYDIS_ISA_SET_AVX512CD_512, - ZYDIS_ISA_SET_AVX512DQ_128, - ZYDIS_ISA_SET_AVX512DQ_128N, - ZYDIS_ISA_SET_AVX512DQ_256, - ZYDIS_ISA_SET_AVX512DQ_512, - ZYDIS_ISA_SET_AVX512DQ_KOP, - ZYDIS_ISA_SET_AVX512DQ_SCALAR, - ZYDIS_ISA_SET_AVX512ER_512, - ZYDIS_ISA_SET_AVX512ER_SCALAR, - ZYDIS_ISA_SET_AVX512F_128, - ZYDIS_ISA_SET_AVX512F_128N, - ZYDIS_ISA_SET_AVX512F_256, - ZYDIS_ISA_SET_AVX512F_512, - ZYDIS_ISA_SET_AVX512F_KOP, - ZYDIS_ISA_SET_AVX512F_SCALAR, - ZYDIS_ISA_SET_AVX512PF_512, - ZYDIS_ISA_SET_AVX512_4FMAPS_512, - ZYDIS_ISA_SET_AVX512_4FMAPS_SCALAR, - ZYDIS_ISA_SET_AVX512_4VNNIW_512, - ZYDIS_ISA_SET_AVX512_BITALG_128, - ZYDIS_ISA_SET_AVX512_BITALG_256, - ZYDIS_ISA_SET_AVX512_BITALG_512, - ZYDIS_ISA_SET_AVX512_GFNI_128, - ZYDIS_ISA_SET_AVX512_GFNI_256, - ZYDIS_ISA_SET_AVX512_GFNI_512, - ZYDIS_ISA_SET_AVX512_IFMA_128, - ZYDIS_ISA_SET_AVX512_IFMA_256, - ZYDIS_ISA_SET_AVX512_IFMA_512, - ZYDIS_ISA_SET_AVX512_VAES_128, - ZYDIS_ISA_SET_AVX512_VAES_256, - ZYDIS_ISA_SET_AVX512_VAES_512, - ZYDIS_ISA_SET_AVX512_VBMI2_128, - ZYDIS_ISA_SET_AVX512_VBMI2_256, - ZYDIS_ISA_SET_AVX512_VBMI2_512, - ZYDIS_ISA_SET_AVX512_VBMI_128, - ZYDIS_ISA_SET_AVX512_VBMI_256, - ZYDIS_ISA_SET_AVX512_VBMI_512, - ZYDIS_ISA_SET_AVX512_VNNI_128, - ZYDIS_ISA_SET_AVX512_VNNI_256, - ZYDIS_ISA_SET_AVX512_VNNI_512, - ZYDIS_ISA_SET_AVX512_VPCLMULQDQ_128, - ZYDIS_ISA_SET_AVX512_VPCLMULQDQ_256, - ZYDIS_ISA_SET_AVX512_VPCLMULQDQ_512, - ZYDIS_ISA_SET_AVX512_VPOPCNTDQ_128, - ZYDIS_ISA_SET_AVX512_VPOPCNTDQ_256, - ZYDIS_ISA_SET_AVX512_VPOPCNTDQ_512, - ZYDIS_ISA_SET_AVXAES, - ZYDIS_ISA_SET_AVX_GFNI, - ZYDIS_ISA_SET_BMI1, - ZYDIS_ISA_SET_BMI2, - ZYDIS_ISA_SET_CET, - ZYDIS_ISA_SET_CLDEMOTE, - ZYDIS_ISA_SET_CLFLUSHOPT, - ZYDIS_ISA_SET_CLFSH, - ZYDIS_ISA_SET_CLWB, - ZYDIS_ISA_SET_CLZERO, - ZYDIS_ISA_SET_CMOV, - ZYDIS_ISA_SET_CMPXCHG16B, - ZYDIS_ISA_SET_F16C, - ZYDIS_ISA_SET_FAT_NOP, - ZYDIS_ISA_SET_FCMOV, - ZYDIS_ISA_SET_FMA, - ZYDIS_ISA_SET_FMA4, - ZYDIS_ISA_SET_FXSAVE, - ZYDIS_ISA_SET_FXSAVE64, - ZYDIS_ISA_SET_GFNI, - ZYDIS_ISA_SET_I186, - ZYDIS_ISA_SET_I286PROTECTED, - ZYDIS_ISA_SET_I286REAL, - ZYDIS_ISA_SET_I386, - ZYDIS_ISA_SET_I486, - ZYDIS_ISA_SET_I486REAL, - ZYDIS_ISA_SET_I86, - ZYDIS_ISA_SET_INVPCID, - ZYDIS_ISA_SET_KNCE, - ZYDIS_ISA_SET_KNCJKBR, - ZYDIS_ISA_SET_KNCSTREAM, - ZYDIS_ISA_SET_KNCV, - ZYDIS_ISA_SET_KNC_MISC, - ZYDIS_ISA_SET_KNC_PF_HINT, - ZYDIS_ISA_SET_LAHF, - ZYDIS_ISA_SET_LONGMODE, - ZYDIS_ISA_SET_LZCNT, - ZYDIS_ISA_SET_MONITOR, - ZYDIS_ISA_SET_MONITORX, - ZYDIS_ISA_SET_MOVBE, - ZYDIS_ISA_SET_MOVDIR, - ZYDIS_ISA_SET_MPX, - ZYDIS_ISA_SET_PADLOCK_ACE, - ZYDIS_ISA_SET_PADLOCK_PHE, - ZYDIS_ISA_SET_PADLOCK_PMM, - ZYDIS_ISA_SET_PADLOCK_RNG, - ZYDIS_ISA_SET_PAUSE, - ZYDIS_ISA_SET_PCLMULQDQ, - ZYDIS_ISA_SET_PCONFIG, - ZYDIS_ISA_SET_PENTIUMMMX, - ZYDIS_ISA_SET_PENTIUMREAL, - ZYDIS_ISA_SET_PKU, - ZYDIS_ISA_SET_POPCNT, - ZYDIS_ISA_SET_PPRO, - ZYDIS_ISA_SET_PREFETCHWT1, - ZYDIS_ISA_SET_PREFETCH_NOP, - ZYDIS_ISA_SET_PT, - ZYDIS_ISA_SET_RDPID, - ZYDIS_ISA_SET_RDPMC, - ZYDIS_ISA_SET_RDRAND, - ZYDIS_ISA_SET_RDSEED, - ZYDIS_ISA_SET_RDTSCP, - ZYDIS_ISA_SET_RDWRFSGS, - ZYDIS_ISA_SET_RTM, - ZYDIS_ISA_SET_SGX, - ZYDIS_ISA_SET_SGX_ENCLV, - ZYDIS_ISA_SET_SHA, - ZYDIS_ISA_SET_SMAP, - ZYDIS_ISA_SET_SMX, - ZYDIS_ISA_SET_SSE, - ZYDIS_ISA_SET_SSE2, - ZYDIS_ISA_SET_SSE2MMX, - ZYDIS_ISA_SET_SSE3, - ZYDIS_ISA_SET_SSE3X87, - ZYDIS_ISA_SET_SSE4, - ZYDIS_ISA_SET_SSE42, - ZYDIS_ISA_SET_SSE4A, - ZYDIS_ISA_SET_SSEMXCSR, - ZYDIS_ISA_SET_SSE_PREFETCH, - ZYDIS_ISA_SET_SSSE3, - ZYDIS_ISA_SET_SSSE3MMX, - ZYDIS_ISA_SET_SVM, - ZYDIS_ISA_SET_TBM, - ZYDIS_ISA_SET_VAES, - ZYDIS_ISA_SET_VMFUNC, - ZYDIS_ISA_SET_VPCLMULQDQ, - ZYDIS_ISA_SET_VTX, - ZYDIS_ISA_SET_WAITPKG, - ZYDIS_ISA_SET_X87, - ZYDIS_ISA_SET_XOP, - ZYDIS_ISA_SET_XSAVE, - ZYDIS_ISA_SET_XSAVEC, - ZYDIS_ISA_SET_XSAVEOPT, - ZYDIS_ISA_SET_XSAVES, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_ISA_SET_MAX_VALUE = ZYDIS_ISA_SET_XSAVES, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_ISA_SET_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_ISA_SET_MAX_VALUE) -} ZydisISASet; -/** - * @brief Defines the `ZydisISAExt` enum. - */ -typedef enum ZydisISAExt_ -{ - ZYDIS_ISA_EXT_INVALID, - ZYDIS_ISA_EXT_ADOX_ADCX, - ZYDIS_ISA_EXT_AES, - ZYDIS_ISA_EXT_AMD3DNOW, - ZYDIS_ISA_EXT_AVX, - ZYDIS_ISA_EXT_AVX2, - ZYDIS_ISA_EXT_AVX2GATHER, - ZYDIS_ISA_EXT_AVX512EVEX, - ZYDIS_ISA_EXT_AVX512VEX, - ZYDIS_ISA_EXT_AVXAES, - ZYDIS_ISA_EXT_BASE, - ZYDIS_ISA_EXT_BMI1, - ZYDIS_ISA_EXT_BMI2, - ZYDIS_ISA_EXT_CET, - ZYDIS_ISA_EXT_CLDEMOTE, - ZYDIS_ISA_EXT_CLFLUSHOPT, - ZYDIS_ISA_EXT_CLFSH, - ZYDIS_ISA_EXT_CLWB, - ZYDIS_ISA_EXT_CLZERO, - ZYDIS_ISA_EXT_F16C, - ZYDIS_ISA_EXT_FMA, - ZYDIS_ISA_EXT_FMA4, - ZYDIS_ISA_EXT_GFNI, - ZYDIS_ISA_EXT_INVPCID, - ZYDIS_ISA_EXT_KNC, - ZYDIS_ISA_EXT_KNCE, - ZYDIS_ISA_EXT_KNCV, - ZYDIS_ISA_EXT_LONGMODE, - ZYDIS_ISA_EXT_LZCNT, - ZYDIS_ISA_EXT_MMX, - ZYDIS_ISA_EXT_MONITOR, - ZYDIS_ISA_EXT_MONITORX, - ZYDIS_ISA_EXT_MOVBE, - ZYDIS_ISA_EXT_MOVDIR, - ZYDIS_ISA_EXT_MPX, - ZYDIS_ISA_EXT_PADLOCK, - ZYDIS_ISA_EXT_PAUSE, - ZYDIS_ISA_EXT_PCLMULQDQ, - ZYDIS_ISA_EXT_PCONFIG, - ZYDIS_ISA_EXT_PKU, - ZYDIS_ISA_EXT_PREFETCHWT1, - ZYDIS_ISA_EXT_PT, - ZYDIS_ISA_EXT_RDPID, - ZYDIS_ISA_EXT_RDRAND, - ZYDIS_ISA_EXT_RDSEED, - ZYDIS_ISA_EXT_RDTSCP, - ZYDIS_ISA_EXT_RDWRFSGS, - ZYDIS_ISA_EXT_RTM, - ZYDIS_ISA_EXT_SGX, - ZYDIS_ISA_EXT_SGX_ENCLV, - ZYDIS_ISA_EXT_SHA, - ZYDIS_ISA_EXT_SMAP, - ZYDIS_ISA_EXT_SMX, - ZYDIS_ISA_EXT_SSE, - ZYDIS_ISA_EXT_SSE2, - ZYDIS_ISA_EXT_SSE3, - ZYDIS_ISA_EXT_SSE4, - ZYDIS_ISA_EXT_SSE4A, - ZYDIS_ISA_EXT_SSSE3, - ZYDIS_ISA_EXT_SVM, - ZYDIS_ISA_EXT_TBM, - ZYDIS_ISA_EXT_VAES, - ZYDIS_ISA_EXT_VMFUNC, - ZYDIS_ISA_EXT_VPCLMULQDQ, - ZYDIS_ISA_EXT_VTX, - ZYDIS_ISA_EXT_WAITPKG, - ZYDIS_ISA_EXT_X87, - ZYDIS_ISA_EXT_XOP, - ZYDIS_ISA_EXT_XSAVE, - ZYDIS_ISA_EXT_XSAVEC, - ZYDIS_ISA_EXT_XSAVEOPT, - ZYDIS_ISA_EXT_XSAVES, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_ISA_EXT_MAX_VALUE = ZYDIS_ISA_EXT_XSAVES, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_ISA_EXT_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_ISA_EXT_MAX_VALUE) -} ZydisISAExt; -/** - * @brief Defines the `ZydisBranchType` enum. - */ -typedef enum ZydisBranchType_ -{ - /** - * @brief The instruction is not a branch instruction. - */ - ZYDIS_BRANCH_TYPE_NONE, - /** - * @brief The instruction is a short (8-bit) branch instruction. - */ - ZYDIS_BRANCH_TYPE_SHORT, - /** - * @brief The instruction is a near (16-bit or 32-bit) branch instruction. - */ - ZYDIS_BRANCH_TYPE_NEAR, - /** - * @brief The instruction is a far (intersegment) branch instruction. - */ - ZYDIS_BRANCH_TYPE_FAR, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_BRANCH_TYPE_MAX_VALUE = ZYDIS_BRANCH_TYPE_FAR, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_BRANCH_TYPE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_BRANCH_TYPE_MAX_VALUE) -} ZydisBranchType; -/** - * @brief Defines the `ZydisExceptionClass` enum. - */ -typedef enum ZydisExceptionClass_ -{ - ZYDIS_EXCEPTION_CLASS_NONE, - // TODO: FP Exceptions - ZYDIS_EXCEPTION_CLASS_SSE1, - ZYDIS_EXCEPTION_CLASS_SSE2, - ZYDIS_EXCEPTION_CLASS_SSE3, - ZYDIS_EXCEPTION_CLASS_SSE4, - ZYDIS_EXCEPTION_CLASS_SSE5, - ZYDIS_EXCEPTION_CLASS_SSE7, - ZYDIS_EXCEPTION_CLASS_AVX1, - ZYDIS_EXCEPTION_CLASS_AVX2, - ZYDIS_EXCEPTION_CLASS_AVX3, - ZYDIS_EXCEPTION_CLASS_AVX4, - ZYDIS_EXCEPTION_CLASS_AVX5, - ZYDIS_EXCEPTION_CLASS_AVX6, - ZYDIS_EXCEPTION_CLASS_AVX7, - ZYDIS_EXCEPTION_CLASS_AVX8, - ZYDIS_EXCEPTION_CLASS_AVX11, - ZYDIS_EXCEPTION_CLASS_AVX12, - ZYDIS_EXCEPTION_CLASS_E1, - ZYDIS_EXCEPTION_CLASS_E1NF, - ZYDIS_EXCEPTION_CLASS_E2, - ZYDIS_EXCEPTION_CLASS_E2NF, - ZYDIS_EXCEPTION_CLASS_E3, - ZYDIS_EXCEPTION_CLASS_E3NF, - ZYDIS_EXCEPTION_CLASS_E4, - ZYDIS_EXCEPTION_CLASS_E4NF, - ZYDIS_EXCEPTION_CLASS_E5, - ZYDIS_EXCEPTION_CLASS_E5NF, - ZYDIS_EXCEPTION_CLASS_E6, - ZYDIS_EXCEPTION_CLASS_E6NF, - ZYDIS_EXCEPTION_CLASS_E7NM, - ZYDIS_EXCEPTION_CLASS_E7NM128, - ZYDIS_EXCEPTION_CLASS_E9NF, - ZYDIS_EXCEPTION_CLASS_E10, - ZYDIS_EXCEPTION_CLASS_E10NF, - ZYDIS_EXCEPTION_CLASS_E11, - ZYDIS_EXCEPTION_CLASS_E11NF, - ZYDIS_EXCEPTION_CLASS_E12, - ZYDIS_EXCEPTION_CLASS_E12NP, - ZYDIS_EXCEPTION_CLASS_K20, - ZYDIS_EXCEPTION_CLASS_K21, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_EXCEPTION_CLASS_MAX_VALUE = ZYDIS_EXCEPTION_CLASS_K21, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_EXCEPTION_CLASS_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_EXCEPTION_CLASS_MAX_VALUE) -} ZydisExceptionClass; -/** - * @brief Defines the `ZydisPrefixType` enum. - */ -typedef enum ZydisPrefixType_ -{ - /** - * @brief The prefix is ignored by the instruction. - * - * This applies to all prefixes that are not accepted by the instruction in general or the - * ones that are overwritten by a prefix of the same group closer to the instruction opcode. - */ - ZYDIS_PREFIX_TYPE_IGNORED, - /** - * @brief The prefix is effectively used by the instruction. - */ - ZYDIS_PREFIX_TYPE_EFFECTIVE, - /** - * @brief The prefix is used as a mandatory prefix. - * - * A mandatory prefix is interpreted as an opcode extension and has no further effect on the - * instruction. - */ - ZYDIS_PREFIX_TYPE_MANDATORY, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_PREFIX_TYPE_MAX_VALUE = ZYDIS_PREFIX_TYPE_MANDATORY, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_PREFIX_TYPE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_PREFIX_TYPE_MAX_VALUE) -} ZydisPrefixType; -/** - * @brief Defines the `ZydisCPUFlagAction` enum. - */ -typedef enum ZydisCPUFlagAction_ -{ - /** - * @brief The CPU flag is not touched by the instruction. - */ - ZYDIS_CPUFLAG_ACTION_NONE, - /** - * @brief The CPU flag is tested (read). - */ - ZYDIS_CPUFLAG_ACTION_TESTED, - /** - * @brief The CPU flag is tested and modified aferwards (read-write). - */ - ZYDIS_CPUFLAG_ACTION_TESTED_MODIFIED, - /** - * @brief The CPU flag is modified (write). - */ - ZYDIS_CPUFLAG_ACTION_MODIFIED, - /** - * @brief The CPU flag is set to 0 (write). - */ - ZYDIS_CPUFLAG_ACTION_SET_0, - /** - * @brief The CPU flag is set to 1 (write). - */ - ZYDIS_CPUFLAG_ACTION_SET_1, - /** - * @brief The CPU flag is undefined (write). - */ - ZYDIS_CPUFLAG_ACTION_UNDEFINED, - - /** - * @brief Maximum value of this enum. - */ - ZYDIS_CPUFLAG_ACTION_MAX_VALUE = ZYDIS_CPUFLAG_ACTION_UNDEFINED, - /** - * @brief The minimum number of bits required to represent all values of this enum. - */ - ZYDIS_CPUFLAG_ACTION_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_CPUFLAG_ACTION_MAX_VALUE) -} ZydisCPUFlagAction; - /** - * Defines the `ZydisFPUFlags` data-type. - */ -typedef ZyanU8 ZydisFPUFlags; - -/** - * @brief Defines the `ZydisDecodedInstruction` struct. - */ -typedef struct ZydisDecodedInstruction_ -{ - /** - * The machine mode used to decode this instruction. - */ - ZydisMachineMode machine_mode; - /** - * The instruction-mnemonic. - */ - ZydisMnemonic mnemonic; - /** - * The length of the decoded instruction. - */ - ZyanU8 length; - /** - * The instruction-encoding (`LEGACY`, `3DNOW`, `VEX`, `EVEX`, `XOP`). - */ - ZydisInstructionEncoding encoding; - /** - * The opcode-map. - */ - ZydisOpcodeMap opcode_map; - /** - * The instruction-opcode. - */ - ZyanU8 opcode; - /** - * The stack width. - */ - ZyanU8 stack_width; - /** - * The effective operand width. - */ - ZyanU8 operand_width; - /** - * The effective address width. - */ - ZyanU8 address_width; - /** - * The number of instruction-operands. - */ - ZyanU8 operand_count; - /** - * Detailed info for all instruction operands. - * - * Explicit operands are guaranteed to be in the front and ordered as they are printed - * by the formatter in Intel mode. No assumptions can be made about the order of hidden - * operands, except that they always located behind the explicit operands. - */ - ZydisDecodedOperand operands[ZYDIS_MAX_OPERAND_COUNT]; - /** - * Instruction attributes. - */ - ZydisInstructionAttributes attributes; - /** - * Information about accessed CPU flags. - * - * DEPRECATED. This field will be removed in the next major release. Please use the - * `cpu_flags_read`/`cpu_flags_written` or `fpu_flags_read`/`fpu_flags_written` fields - * instead. - */ - struct ZydisDecodedInstructionAccessedFlags_ - { - /** - * The CPU-flag action. - * - * Use `ZydisGetAccessedFlagsByAction` to get a mask with all flags matching a specific - * action. - */ - ZydisCPUFlagAction action; - } accessed_flags[ZYDIS_CPUFLAG_MAX_VALUE + 1]; - /** - * A mask containing the CPU flags read by the instruction. - * - * The bits in this mask correspond to the actual bits in the `FLAGS/EFLAGS/RFLAGS` - * register. - * - * This mask includes the actions `TESTED` and `TESTED_MODIFIED`. - */ - ZydisCPUFlags cpu_flags_read; - /** - * A mask containing the CPU flags written by the instruction. - * - * The bits in this mask correspond to the actual bits in the `FLAGS/EFLAGS/RFLAGS` - * register. - * - * This mask includes the actions `TESTED_MODIFIED`, `SET_0`, `SET_1` and `UNDEFINED`. - */ - ZydisCPUFlags cpu_flags_written; - /** - * A mask containing the FPU flags read by the instruction. - */ - ZydisFPUFlags fpu_flags_read; - /** - * A mask containing the FPU flags written by the instruction. - */ - ZydisFPUFlags fpu_flags_written; - /** - * Extended info for `AVX` instructions. - */ - struct ZydisDecodedInstructionAvx_ - { - /** - * The `AVX` vector-length. - */ - ZyanU16 vector_length; - /** - * Info about the embedded writemask-register (`AVX-512` and `KNC` only). - */ - struct ZydisDecodedInstructionAvxMask_ - { - /** - * The masking mode. - */ - ZydisMaskMode mode; - /** - * The mask register. - */ - ZydisRegister reg; - } mask; - /** - * Contains info about the `AVX` broadcast. - */ - struct ZydisDecodedInstructionAvxBroadcast_ - { - /** - * Signals, if the broadcast is a static broadcast. - * - * This is the case for instructions with inbuilt broadcast functionality, which is - * always active and not controlled by the `EVEX/MVEX.RC` bits. - */ - ZyanBool is_static; - /** - * The `AVX` broadcast-mode. - */ - ZydisBroadcastMode mode; - } broadcast; - /** - * Contains info about the `AVX` rounding. - */ - struct ZydisDecodedInstructionAvxRounding_ - { - /** - * The `AVX` rounding-mode. - */ - ZydisRoundingMode mode; - } rounding; - /** - * Contains info about the `AVX` register-swizzle (`KNC` only). - */ - struct ZydisDecodedInstructionAvxSwizzle_ - { - /** - * The `AVX` register-swizzle mode. - */ - ZydisSwizzleMode mode; - } swizzle; - /** - * Contains info about the `AVX` data-conversion (`KNC` only). - */ - struct ZydisDecodedInstructionAvxConversion_ - { - /** - * The `AVX` data-conversion mode. - */ - ZydisConversionMode mode; - } conversion; - /** - * Signals, if the `SAE` (suppress-all-exceptions) functionality is - * enabled for the instruction. - */ - ZyanBool has_sae; - /** - * Signals, if the instruction has a memory-eviction-hint (`KNC` only). - */ - ZyanBool has_eviction_hint; - // TODO: publish EVEX tuple-type and MVEX functionality - } avx; - /** - * Meta info. - */ - struct ZydisDecodedInstructionMeta_ - { - /** - * The instruction category. - */ - ZydisInstructionCategory category; - /** - * The ISA-set. - */ - ZydisISASet isa_set; - /** - * The ISA-set extension. - */ - ZydisISAExt isa_ext; - /** - * The branch type. - */ - ZydisBranchType branch_type; - /** - * The exception class. - */ - ZydisExceptionClass exception_class; - } meta; - /** - * Detailed info about different instruction-parts like `ModRM`, `SIB` or - * encoding-prefixes. - */ - struct ZydisDecodedInstructionRaw_ - { - /** - * The number of legacy prefixes. - */ - ZyanU8 prefix_count; - /** - * Detailed info about the legacy prefixes (including `REX`). - */ - struct ZydisDecodedInstructionRawPrefixes_ - { - /** - * The prefix type. - */ - ZydisPrefixType type; - /** - * The prefix byte. - */ - ZyanU8 value; - } prefixes[ZYDIS_MAX_INSTRUCTION_LENGTH]; - /** - * Detailed info about the `REX` prefix. - */ - struct ZydisDecodedInstructionRawRex_ - { - /** - * 64-bit operand-size promotion. - */ - ZyanU8 W; - /** - * Extension of the `ModRM.reg` field. - */ - ZyanU8 R; - /** - * Extension of the `SIB.index` field. - */ - ZyanU8 X; - /** - * Extension of the `ModRM.rm`, `SIB.base`, or `opcode.reg` field. - */ - ZyanU8 B; - /** - * The offset of the effective `REX` byte, relative to the beginning of the - * instruction, in bytes. - * - * This offset always points to the "effective" `REX` prefix (the one closest to the - * instruction opcode), if multiple `REX` prefixes are present. - * - * Note that the `REX` byte can be the first byte of the instruction, which would lead - * to an offset of `0`. Please refer to the instruction attributes to check for the - * presence of the `REX` prefix. - */ - ZyanU8 offset; - } rex; - /** - * Detailed info about the `XOP` prefix. - */ - struct ZydisDecodedInstructionRawXop_ - { - /** - * Extension of the `ModRM.reg` field (inverted). - */ - ZyanU8 R; - /** - * Extension of the `SIB.index` field (inverted). - */ - ZyanU8 X; - /** - * Extension of the `ModRM.rm`, `SIB.base`, or `opcode.reg` field (inverted). - */ - ZyanU8 B; - /** - * Opcode-map specifier. - */ - ZyanU8 m_mmmm; - /** - * 64-bit operand-size promotion or opcode-extension. - */ - ZyanU8 W; - /** - * `NDS`/`NDD` (non-destructive-source/destination) register - * specifier (inverted). - */ - ZyanU8 vvvv; - /** - * Vector-length specifier. - */ - ZyanU8 L; - /** - * Compressed legacy prefix. - */ - ZyanU8 pp; - /** - * The offset of the first xop byte, relative to the beginning of - * the instruction, in bytes. - */ - ZyanU8 offset; - } xop; - /** - * Detailed info about the `VEX` prefix. - */ - struct ZydisDecodedInstructionRawVex_ - { - /** - * Extension of the `ModRM.reg` field (inverted). - */ - ZyanU8 R; - /** - * Extension of the `SIB.index` field (inverted). - */ - ZyanU8 X; - /** - * Extension of the `ModRM.rm`, `SIB.base`, or `opcode.reg` field (inverted). - */ - ZyanU8 B; - /** - * Opcode-map specifier. - */ - ZyanU8 m_mmmm; - /** - * 64-bit operand-size promotion or opcode-extension. - */ - ZyanU8 W; - /** - * `NDS`/`NDD` (non-destructive-source/destination) register specifier - * (inverted). - */ - ZyanU8 vvvv; - /** - * Vector-length specifier. - */ - ZyanU8 L; - /** - * Compressed legacy prefix. - */ - ZyanU8 pp; - /** - * The offset of the first `VEX` byte, relative to the beginning of the instruction, in - * bytes. - */ - ZyanU8 offset; - /** - * The size of the `VEX` prefix, in bytes. - */ - ZyanU8 size; - } vex; - /** - * Detailed info about the `EVEX` prefix. - */ - struct ZydisDecodedInstructionRawEvex_ - { - /** - * Extension of the `ModRM.reg` field (inverted). - */ - ZyanU8 R; - /** - * Extension of the `SIB.index/vidx` field (inverted). - */ - ZyanU8 X; - /** - * Extension of the `ModRM.rm` or `SIB.base` field (inverted). - */ - ZyanU8 B; - /** - * High-16 register specifier modifier (inverted). - */ - ZyanU8 R2; - /** - * Opcode-map specifier. - */ - ZyanU8 mm; - /** - * 64-bit operand-size promotion or opcode-extension. - */ - ZyanU8 W; - /** - * `NDS`/`NDD` (non-destructive-source/destination) register specifier - * (inverted). - */ - ZyanU8 vvvv; - /** - * Compressed legacy prefix. - */ - ZyanU8 pp; - /** - * Zeroing/Merging. - */ - ZyanU8 z; - /** - * Vector-length specifier or rounding-control (most significant bit). - */ - ZyanU8 L2; - /** - * Vector-length specifier or rounding-control (least significant bit). - */ - ZyanU8 L; - /** - * Broadcast/RC/SAE context. - */ - ZyanU8 b; - /** - * High-16 `NDS`/`VIDX` register specifier. - */ - ZyanU8 V2; - /** - * Embedded opmask register specifier. - */ - ZyanU8 aaa; - /** - * The offset of the first evex byte, relative to the beginning of the - * instruction, in bytes. - */ - ZyanU8 offset; - } evex; - /** - * Detailed info about the `MVEX` prefix. - */ - struct ZydisDecodedInstructionRawMvex_ - { - /** - * Extension of the `ModRM.reg` field (inverted). - */ - ZyanU8 R; - /** - * Extension of the `SIB.index/vidx` field (inverted). - */ - ZyanU8 X; - /** - * Extension of the `ModRM.rm` or `SIB.base` field (inverted). - */ - ZyanU8 B; - /** - * High-16 register specifier modifier (inverted). - */ - ZyanU8 R2; - /** - * Opcode-map specifier. - */ - ZyanU8 mmmm; - /** - * 64-bit operand-size promotion or opcode-extension. - */ - ZyanU8 W; - /** - * `NDS`/`NDD` (non-destructive-source/destination) register specifier - * (inverted). - */ - ZyanU8 vvvv; - /** - * Compressed legacy prefix. - */ - ZyanU8 pp; - /** - * Non-temporal/eviction hint. - */ - ZyanU8 E; - /** - * Swizzle/broadcast/up-convert/down-convert/static-rounding controls. - */ - ZyanU8 SSS; - /** - * High-16 `NDS`/`VIDX` register specifier. - */ - ZyanU8 V2; - /** - * Embedded opmask register specifier. - */ - ZyanU8 kkk; - /** - * The offset of the first mvex byte, relative to the beginning of the - * instruction, in bytes. - */ - ZyanU8 offset; - } mvex; - /** - * Detailed info about the `ModRM` byte. - */ - struct ZydisDecodedInstructionModRm_ - { - /** - * The addressing mode. - */ - ZyanU8 mod; - /** - * Register specifier or opcode-extension. - */ - ZyanU8 reg; - /** - * Register specifier or opcode-extension. - */ - ZyanU8 rm; - /** - * The offset of the `ModRM` byte, relative to the beginning of the - * instruction, in bytes. - */ - ZyanU8 offset; - } modrm; - /** - * Detailed info about the `SIB` byte. - */ - struct ZydisDecodedInstructionRawSib_ - { - /** - * The scale factor. - */ - ZyanU8 scale; - /** - * The index-register specifier. - */ - ZyanU8 index; - /** - * The base-register specifier. - */ - ZyanU8 base; - /** - * The offset of the `SIB` byte, relative to the beginning of the - * instruction, in bytes. - */ - ZyanU8 offset; - } sib; - /** - * Detailed info about displacement-bytes. - */ - struct ZydisDecodedInstructionRawDisp_ - { - /** - * The displacement value - */ - ZyanI64 value; - /** - * The physical displacement size, in bits. - */ - ZyanU8 size; - // TODO: publish cd8 scale - /** - * The offset of the displacement data, relative to the beginning of the - * instruction, in bytes. - */ - ZyanU8 offset; - } disp; - /** - * Detailed info about immediate-bytes. - */ - struct ZydisDecodedInstructionRawImm_ - { - /** - * Signals, if the immediate value is signed. - */ - ZyanBool is_signed; - /** - * Signals, if the immediate value contains a relative offset. You can use - * `ZydisCalcAbsoluteAddress` to determine the absolute address value. - */ - ZyanBool is_relative; - /** - * The immediate value. - */ - union ZydisDecodedInstructionRawImmValue_ - { - ZyanU64 u; - ZyanI64 s; - } value; - /** - * The physical immediate size, in bits. - */ - ZyanU8 size; - /** - * The offset of the immediate data, relative to the beginning of the - * instruction, in bytes. - */ - ZyanU8 offset; - } imm[2]; - } raw; -} ZydisDecodedInstruction; - - -#endif \ No newline at end of file |