Zydis  v2.0
Data Structures | Macros | Typedefs | Enumerations
DecoderTypes.h File Reference

Defines the basic ZydisDecodedInstruction and ZydisDecodedOperand structs. More...

#include <Zycore/Types.h>
#include <Zydis/MetaInfo.h>
#include <Zydis/Mnemonic.h>
#include <Zydis/Register.h>
#include <Zydis/SharedTypes.h>

Go to the source code of this file.

Data Structures

struct  ZydisDecodedOperand_
 Defines the ZydisDecodedOperand struct. More...
 
struct  ZydisDecodedInstruction_
 Defines the ZydisDecodedInstruction struct. More...
 

Macros

#define ZYDIS_ATTRIB_HAS_MODRM   0x0000000000000001
 The instruction has the ModRM byte.
 
#define ZYDIS_ATTRIB_HAS_SIB   0x0000000000000002
 The instruction has the SUB byte.
 
#define ZYDIS_ATTRIB_HAS_REX   0x0000000000000004
 The instruction has the REX prefix.
 
#define ZYDIS_ATTRIB_HAS_XOP   0x0000000000000008
 The instruction has the XOP prefix.
 
#define ZYDIS_ATTRIB_HAS_VEX   0x0000000000000010
 The instruction has the VEX prefix.
 
#define ZYDIS_ATTRIB_HAS_EVEX   0x0000000000000020
 The instruction has the EVEX prefix.
 
#define ZYDIS_ATTRIB_HAS_MVEX   0x0000000000000040
 The instruction has the MVEX prefix.
 
#define ZYDIS_ATTRIB_IS_RELATIVE   0x0000000000000080
 The instruction has one or more operands with position-relative offsets.
 
#define ZYDIS_ATTRIB_IS_PRIVILEGED   0x0000000000000100
 The instruction is privileged. More...
 
#define ZYDIS_ATTRIB_IS_FAR_BRANCH   0x0000001000000000
 The instruction is a far JMP/CALL/RET.
 
#define ZYDIS_ATTRIB_CPUFLAG_ACCESS   0x0000002000000000
 The instruction accesses one or more CPU-flags.
 
#define ZYDIS_ATTRIB_ACCEPTS_LOCK   0x0000000000000200
 The instruction accepts the lock prefix (0xF0).
 
#define ZYDIS_ATTRIB_ACCEPTS_REP   0x0000000000000400
 The instruction accepts the rep prefix (0xF3).
 
#define ZYDIS_ATTRIB_ACCEPTS_REPE   0x0000000000000800
 The instruction accepts the repe/repz prefix (0xF3).
 
#define ZYDIS_ATTRIB_ACCEPTS_REPZ   0x0000000000000800
 The instruction accepts the repe/repz prefix (0xF3).
 
#define ZYDIS_ATTRIB_ACCEPTS_REPNE   0x0000000000001000
 The instruction accepts the repne/repnz prefix (0xF2).
 
#define ZYDIS_ATTRIB_ACCEPTS_REPNZ   0x0000000000001000
 The instruction accepts the repne/repnz prefix (0xF2).
 
#define ZYDIS_ATTRIB_ACCEPTS_BOUND   0x0000000000002000
 The instruction accepts the bound prefix (0xF2).
 
#define ZYDIS_ATTRIB_ACCEPTS_XACQUIRE   0x0000000000004000
 The instruction accepts the xacquire prefix (0xF2).
 
#define ZYDIS_ATTRIB_ACCEPTS_XRELEASE   0x0000000000008000
 The instruction accepts the xrelease prefix (0xF3).
 
#define ZYDIS_ATTRIB_ACCEPTS_HLE_WITHOUT_LOCK   0x0000000000010000
 The instruction accepts the xacquire/xrelease prefixes (0xF2, 0xF3) without the lock-prefix (0x0F).
 
#define ZYDIS_ATTRIB_ACCEPTS_BRANCH_HINTS   0x0000000000020000
 The instruction accepts branch hints (0x2E, 0x3E).
 
#define ZYDIS_ATTRIB_ACCEPTS_SEGMENT   0x0000000000040000
 The instruction accepts segment prefixes (0x2E, 0x36, 0x3E, 0x26, 0x64, 0x65).
 
#define ZYDIS_ATTRIB_HAS_LOCK   0x0000000000080000
 The instruction has the lock prefix (0xF0).
 
#define ZYDIS_ATTRIB_HAS_REP   0x0000000000100000
 The instruction has the rep prefix (0xF3).
 
#define ZYDIS_ATTRIB_HAS_REPE   0x0000000000200000
 The instruction has the repe/repz prefix (0xF3).
 
#define ZYDIS_ATTRIB_HAS_REPZ   0x0000000000200000
 The instruction has the repe/repz prefix (0xF3).
 
#define ZYDIS_ATTRIB_HAS_REPNE   0x0000000000400000
 The instruction has the repne/repnz prefix (0xF2).
 
#define ZYDIS_ATTRIB_HAS_REPNZ   0x0000000000400000
 The instruction has the repne/repnz prefix (0xF2).
 
#define ZYDIS_ATTRIB_HAS_BOUND   0x0000000000800000
 The instruction has the bound prefix (0xF2).
 
#define ZYDIS_ATTRIB_HAS_XACQUIRE   0x0000000001000000
 The instruction has the xacquire prefix (0xF2).
 
#define ZYDIS_ATTRIB_HAS_XRELEASE   0x0000000002000000
 The instruction has the xrelease prefix (0xF3).
 
#define ZYDIS_ATTRIB_HAS_BRANCH_NOT_TAKEN   0x0000000004000000
 The instruction has the branch-not-taken hint (0x2E).
 
#define ZYDIS_ATTRIB_HAS_BRANCH_TAKEN   0x0000000008000000
 The instruction has the branch-taken hint (0x3E).
 
#define ZYDIS_ATTRIB_HAS_SEGMENT   0x00000003F0000000
 The instruction has a segment modifier.
 
#define ZYDIS_ATTRIB_HAS_SEGMENT_CS   0x0000000010000000
 The instruction has the CS segment modifier (0x2E).
 
#define ZYDIS_ATTRIB_HAS_SEGMENT_SS   0x0000000020000000
 The instruction has the SS segment modifier (0x36).
 
#define ZYDIS_ATTRIB_HAS_SEGMENT_DS   0x0000000040000000
 The instruction has the DS segment modifier (0x3E).
 
#define ZYDIS_ATTRIB_HAS_SEGMENT_ES   0x0000000080000000
 The instruction has the ES segment modifier (0x26).
 
#define ZYDIS_ATTRIB_HAS_SEGMENT_FS   0x0000000100000000
 The instruction has the FS segment modifier (0x64).
 
#define ZYDIS_ATTRIB_HAS_SEGMENT_GS   0x0000000200000000
 The instruction has the GS segment modifier (0x65).
 
#define ZYDIS_ATTRIB_HAS_OPERANDSIZE   0x0000000400000000
 The instruction has the operand-size prefix (0x66).
 
#define ZYDIS_ATTRIB_HAS_ADDRESSSIZE   0x0000000800000000
 The instruction has the address-size prefix (0x67).
 

Typedefs

typedef enum ZydisMemoryOperandType_ ZydisMemoryOperandType
 Defines the ZydisMemoryOperandType enum.
 
typedef struct ZydisDecodedOperand_ ZydisDecodedOperand
 Defines the ZydisDecodedOperand struct.
 
typedef ZyanU64 ZydisInstructionAttributes
 Defines the ZydisInstructionAttributes datatype.
 
typedef ZyanU32 ZydisCPUFlags
 Defines the ZydisCPUFlags datatype.
 
typedef enum ZydisCPUFlag_ ZydisCPUFlag
 Defines the ZydisCPUFlag enum.
 
typedef enum ZydisCPUFlagAction_ ZydisCPUFlagAction
 Defines the ZydisCPUFlagAction enum.
 
typedef enum ZydisExceptionClass_ ZydisExceptionClass
 Defines the ZydisExceptionClass enum.
 
typedef enum ZydisMaskMode_ ZydisMaskMode
 Defines the ZydisMaskMode enum.
 
typedef enum ZydisBroadcastMode_ ZydisBroadcastMode
 Defines the ZydisBroadcastMode enum.
 
typedef enum ZydisRoundingMode_ ZydisRoundingMode
 Defines the ZydisRoundingMode enum.
 
typedef enum ZydisSwizzleMode_ ZydisSwizzleMode
 Defines the ZydisSwizzleMode enum.
 
typedef enum ZydisConversionMode_ ZydisConversionMode
 Defines the ZydisConversionMode enum.
 
typedef struct ZydisDecodedInstruction_ ZydisDecodedInstruction
 Defines the ZydisDecodedInstruction struct.
 

Enumerations

enum  ZydisMemoryOperandType_ {
  ZYDIS_MEMOP_TYPE_INVALID, ZYDIS_MEMOP_TYPE_MEM, ZYDIS_MEMOP_TYPE_AGEN, ZYDIS_MEMOP_TYPE_MIB,
  ZYDIS_MEMOP_TYPE_MAX_VALUE = ZYDIS_MEMOP_TYPE_MIB, ZYDIS_MEMOP_TYPE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_MEMOP_TYPE_MAX_VALUE)
}
 Defines the ZydisMemoryOperandType enum. More...
 
enum  ZydisCPUFlag_ {
  ZYDIS_CPUFLAG_CF, ZYDIS_CPUFLAG_PF, ZYDIS_CPUFLAG_AF, ZYDIS_CPUFLAG_ZF,
  ZYDIS_CPUFLAG_SF, ZYDIS_CPUFLAG_TF, ZYDIS_CPUFLAG_IF, ZYDIS_CPUFLAG_DF,
  ZYDIS_CPUFLAG_OF, ZYDIS_CPUFLAG_IOPL, ZYDIS_CPUFLAG_NT, ZYDIS_CPUFLAG_RF,
  ZYDIS_CPUFLAG_VM, ZYDIS_CPUFLAG_AC, ZYDIS_CPUFLAG_VIF, ZYDIS_CPUFLAG_VIP,
  ZYDIS_CPUFLAG_ID, ZYDIS_CPUFLAG_C0, ZYDIS_CPUFLAG_C1, ZYDIS_CPUFLAG_C2,
  ZYDIS_CPUFLAG_C3, ZYDIS_CPUFLAG_MAX_VALUE = ZYDIS_CPUFLAG_C3, ZYDIS_CPUFLAG_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_CPUFLAG_MAX_VALUE)
}
 Defines the ZydisCPUFlag enum. More...
 
enum  ZydisCPUFlagAction_ {
  ZYDIS_CPUFLAG_ACTION_NONE, ZYDIS_CPUFLAG_ACTION_TESTED, ZYDIS_CPUFLAG_ACTION_MODIFIED, ZYDIS_CPUFLAG_ACTION_SET_0,
  ZYDIS_CPUFLAG_ACTION_SET_1, ZYDIS_CPUFLAG_ACTION_UNDEFINED, ZYDIS_CPUFLAG_ACTION_MAX_VALUE = ZYDIS_CPUFLAG_ACTION_UNDEFINED, ZYDIS_CPUFLAG_ACTION_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_CPUFLAG_ACTION_MAX_VALUE)
}
 Defines the ZydisCPUFlagAction enum. More...
 
enum  ZydisExceptionClass_ {
  ZYDIS_EXCEPTION_CLASS_NONE, 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,
  ZYDIS_EXCEPTION_CLASS_MAX_VALUE = ZYDIS_EXCEPTION_CLASS_K21, ZYDIS_EXCEPTION_CLASS_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_EXCEPTION_CLASS_MAX_VALUE)
}
 Defines the ZydisExceptionClass enum. More...
 
enum  ZydisMaskMode_ {
  ZYDIS_MASK_MODE_INVALID, ZYDIS_MASK_MODE_DISABLED, ZYDIS_MASK_MODE_MERGE, ZYDIS_MASK_MODE_ZERO,
  ZYDIS_MASK_MODE_CONTROL, ZYDIS_MASK_MODE_CONTROL_ZERO, ZYDIS_MASK_MODE_MAX_VALUE = ZYDIS_MASK_MODE_CONTROL_ZERO, ZYDIS_MASK_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_MASK_MODE_MAX_VALUE)
}
 Defines the ZydisMaskMode enum. More...
 
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, ZYDIS_BROADCAST_MODE_MAX_VALUE = ZYDIS_BROADCAST_MODE_8_TO_16, ZYDIS_BROADCAST_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_BROADCAST_MODE_MAX_VALUE)
}
 Defines the ZydisBroadcastMode enum. More...
 
enum  ZydisRoundingMode_ {
  ZYDIS_ROUNDING_MODE_INVALID, ZYDIS_ROUNDING_MODE_RN, ZYDIS_ROUNDING_MODE_RD, ZYDIS_ROUNDING_MODE_RU,
  ZYDIS_ROUNDING_MODE_RZ, ZYDIS_ROUNDING_MODE_MAX_VALUE = ZYDIS_ROUNDING_MODE_RZ, ZYDIS_ROUNDING_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_ROUNDING_MODE_MAX_VALUE)
}
 Defines the ZydisRoundingMode enum. More...
 
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, ZYDIS_SWIZZLE_MODE_MAX_VALUE = ZYDIS_SWIZZLE_MODE_DDDD, ZYDIS_SWIZZLE_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_SWIZZLE_MODE_MAX_VALUE)
}
 Defines the ZydisSwizzleMode enum. More...
 
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, ZYDIS_CONVERSION_MODE_MAX_VALUE = ZYDIS_CONVERSION_MODE_UINT16, ZYDIS_CONVERSION_MODE_REQUIRED_BITS = ZYAN_BITS_TO_REPRESENT(ZYDIS_CONVERSION_MODE_MAX_VALUE)
}
 Defines the ZydisConversionMode enum. More...
 

Detailed Description

Defines the basic ZydisDecodedInstruction and ZydisDecodedOperand structs.

Macro Definition Documentation

◆ ZYDIS_ATTRIB_IS_PRIVILEGED

#define ZYDIS_ATTRIB_IS_PRIVILEGED   0x0000000000000100

The instruction is privileged.

Priviliged instructions are any instructions that require a current ring level below 3.

Enumeration Type Documentation

◆ ZydisBroadcastMode_

Defines the ZydisBroadcastMode enum.

Enumerator
ZYDIS_BROADCAST_MODE_MAX_VALUE 

Maximum value of this enum.

ZYDIS_BROADCAST_MODE_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisConversionMode_

Defines the ZydisConversionMode enum.

Enumerator
ZYDIS_CONVERSION_MODE_MAX_VALUE 

Maximum value of this enum.

ZYDIS_CONVERSION_MODE_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisCPUFlag_

Defines the ZydisCPUFlag enum.

Enumerator
ZYDIS_CPUFLAG_CF 

Carry flag.

ZYDIS_CPUFLAG_PF 

Parity flag.

ZYDIS_CPUFLAG_AF 

Adjust flag.

ZYDIS_CPUFLAG_ZF 

Zero flag.

ZYDIS_CPUFLAG_SF 

Sign flag.

ZYDIS_CPUFLAG_TF 

Trap flag.

ZYDIS_CPUFLAG_IF 

Interrupt enable flag.

ZYDIS_CPUFLAG_DF 

Direction flag.

ZYDIS_CPUFLAG_OF 

Overflow flag.

ZYDIS_CPUFLAG_IOPL 

I/O privilege level flag.

ZYDIS_CPUFLAG_NT 

Nested task flag.

ZYDIS_CPUFLAG_RF 

Resume flag.

ZYDIS_CPUFLAG_VM 

Virtual 8086 mode flag.

ZYDIS_CPUFLAG_AC 

Alignment check.

ZYDIS_CPUFLAG_VIF 

Virtual interrupt flag.

ZYDIS_CPUFLAG_VIP 

Virtual interrupt pending.

ZYDIS_CPUFLAG_ID 

Able to use CPUID instruction.

ZYDIS_CPUFLAG_C0 

FPU condition-code flag 0.

ZYDIS_CPUFLAG_C1 

FPU condition-code flag 1.

ZYDIS_CPUFLAG_C2 

FPU condition-code flag 2.

ZYDIS_CPUFLAG_C3 

FPU condition-code flag 3.

ZYDIS_CPUFLAG_MAX_VALUE 

Maximum value of this enum.

ZYDIS_CPUFLAG_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisCPUFlagAction_

Defines the ZydisCPUFlagAction enum.

Enumerator
ZYDIS_CPUFLAG_ACTION_MAX_VALUE 

Maximum value of this enum.

ZYDIS_CPUFLAG_ACTION_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisExceptionClass_

Defines the ZydisExceptionClass enum.

Enumerator
ZYDIS_EXCEPTION_CLASS_MAX_VALUE 

Maximum value of this enum.

ZYDIS_EXCEPTION_CLASS_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisMaskMode_

Defines the ZydisMaskMode enum.

Enumerator
ZYDIS_MASK_MODE_DISABLED 

Masking is disabled for the current instruction (K0 register is used).

ZYDIS_MASK_MODE_MERGE 

The embedded mask register is used as a merge-mask.

ZYDIS_MASK_MODE_ZERO 

The embedded mask register is used as a zero-mask.

ZYDIS_MASK_MODE_CONTROL 

The embedded mask register is used as a control-mask (element selector).

ZYDIS_MASK_MODE_CONTROL_ZERO 

The embedded mask register is used as a zeroing control-mask (element selector).

ZYDIS_MASK_MODE_MAX_VALUE 

Maximum value of this enum.

ZYDIS_MASK_MODE_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisMemoryOperandType_

Defines the ZydisMemoryOperandType enum.

Enumerator
ZYDIS_MEMOP_TYPE_MEM 

Normal memory operand.

ZYDIS_MEMOP_TYPE_AGEN 

The memory operand is only used for address-generation. No real memory-access is caused.

ZYDIS_MEMOP_TYPE_MIB 

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_MAX_VALUE 

Maximum value of this enum.

ZYDIS_MEMOP_TYPE_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisRoundingMode_

Defines the ZydisRoundingMode enum.

Enumerator
ZYDIS_ROUNDING_MODE_RN 

Round to nearest.

ZYDIS_ROUNDING_MODE_RD 

Round down.

ZYDIS_ROUNDING_MODE_RU 

Round up.

ZYDIS_ROUNDING_MODE_RZ 

Round towards zero.

ZYDIS_ROUNDING_MODE_MAX_VALUE 

Maximum value of this enum.

ZYDIS_ROUNDING_MODE_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.

◆ ZydisSwizzleMode_

Defines the ZydisSwizzleMode enum.

Enumerator
ZYDIS_SWIZZLE_MODE_MAX_VALUE 

Maximum value of this enum.

ZYDIS_SWIZZLE_MODE_REQUIRED_BITS 

The minimum number of bits required to represent all values of this enum.