Zydis  v3.1.0
SharedData.h
Go to the documentation of this file.
1 /***************************************************************************************************
2 
3  Zyan Disassembler Library (Zydis)
4 
5  Original Author : Florian Bernd
6 
7  * Permission is hereby granted, free of charge, to any person obtaining a copy
8  * of this software and associated documentation files (the "Software"), to deal
9  * in the Software without restriction, including without limitation the rights
10  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11  * copies of the Software, and to permit persons to whom the Software is
12  * furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in all
15  * copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24 
25 ***************************************************************************************************/
26 
27 #ifndef ZYDIS_INTERNAL_SHAREDDATA_H
28 #define ZYDIS_INTERNAL_SHAREDDATA_H
29 
30 #include <Zycore/Defines.h>
31 #include <Zydis/Mnemonic.h>
32 #include <Zydis/Register.h>
33 #include <Zydis/SharedTypes.h>
34 #include <Zydis/DecoderTypes.h>
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /* ============================================================================================== */
41 /* Enums and types */
42 /* ============================================================================================== */
43 
44 // MSVC does not like types other than (un-)signed int for bit-fields
45 #ifdef ZYAN_MSVC
46 # pragma warning(push)
47 # pragma warning(disable:4214)
48 #endif
49 
50 #pragma pack(push, 1)
51 
52 /* ---------------------------------------------------------------------------------------------- */
53 /* Operand definition */
54 /* ---------------------------------------------------------------------------------------------- */
55 
60 {
93 
103 
104 /* ---------------------------------------------------------------------------------------------- */
105 
110 {
134 
144 
145 /* ---------------------------------------------------------------------------------------------- */
146 
151 {
159 
169 
170 /* ---------------------------------------------------------------------------------------------- */
171 
176 {
186 
196 
197 /* ---------------------------------------------------------------------------------------------- */
198 
199 // MSVC does not correctly execute the `pragma pack(1)` compiler-directive, if we use the correct
200 // enum types
209 
214 {
218  ZyanU16 size[3];
220  union
221  {
223  struct
224  {
226  union
227  {
229  ZyanU8 id ZYAN_BITFIELD(6);
230  } reg;
231  } reg;
232  struct
233  {
234  ZyanU8 seg ZYAN_BITFIELD(3);
236  } mem;
237  } op;
239 
240 /* ---------------------------------------------------------------------------------------------- */
241 /* Instruction definition */
242 /* ---------------------------------------------------------------------------------------------- */
243 
248 {
253 
263 
264 /* ---------------------------------------------------------------------------------------------- */
265 
270 {
282 
292 
293 /* ---------------------------------------------------------------------------------------------- */
294 
299 {
304 
314 
315 /* ---------------------------------------------------------------------------------------------- */
316 
321 {
328 
338 
339 /* ---------------------------------------------------------------------------------------------- */
340 
345 {
359 
369 
370 /* ---------------------------------------------------------------------------------------------- */
371 
376 {
438 
448 
449 /* ---------------------------------------------------------------------------------------------- */
450 
455 {
560 
570 
571 /* ---------------------------------------------------------------------------------------------- */
572 
577 {
585 
594  ZYAN_BITS_TO_REPRESENT(ZYDIS_VEX_STATIC_BROADCAST_MAX_VALUE)
596 
597 /* ---------------------------------------------------------------------------------------------- */
598 
603 {
617 
626  ZYAN_BITS_TO_REPRESENT(ZYDIS_EVEX_STATIC_BROADCAST_MAX_VALUE)
628 
629 /* ---------------------------------------------------------------------------------------------- */
630 
635 {
641 
650  ZYAN_BITS_TO_REPRESENT(ZYDIS_MVEX_STATIC_BROADCAST_MAX_VALUE)
652 
653 /* ---------------------------------------------------------------------------------------------- */
654 
658 typedef enum ZydisMaskPolicy_
659 {
674 
684 
685 /* ---------------------------------------------------------------------------------------------- */
686 
690 typedef enum ZydisMaskOverride_
691 {
695 
705 
706 /* ---------------------------------------------------------------------------------------------- */
707 
708 // MSVC does not correctly execute the `pragma pack(1)` compiler-directive, if we use the correct
709 // enum types
718 
719 #ifndef ZYDIS_MINIMAL_MODE
720 # define ZYDIS_INSTRUCTION_DEFINITION_BASE \
721  ZyanU16 mnemonic ZYAN_BITFIELD(ZYDIS_MNEMONIC_REQUIRED_BITS); \
722  ZyanU8 operand_count ZYAN_BITFIELD( 4); \
723  ZyanU16 operand_reference ZYAN_BITFIELD(15); \
724  ZyanU8 operand_size_map ZYAN_BITFIELD( 3); \
725  ZyanU8 address_size_map ZYAN_BITFIELD( 2); \
726  ZyanU8 flags_reference ZYAN_BITFIELD( 7); \
727  ZyanBool requires_protected_mode ZYAN_BITFIELD( 1); \
728  ZyanU8 category ZYAN_BITFIELD(ZYDIS_CATEGORY_REQUIRED_BITS); \
729  ZyanU8 isa_set ZYAN_BITFIELD(ZYDIS_ISA_SET_REQUIRED_BITS); \
730  ZyanU8 isa_ext ZYAN_BITFIELD(ZYDIS_ISA_EXT_REQUIRED_BITS); \
731  ZyanU8 branch_type ZYAN_BITFIELD(ZYDIS_BRANCH_TYPE_REQUIRED_BITS); \
732  ZyanU8 exception_class ZYAN_BITFIELD(ZYDIS_EXCEPTION_CLASS_REQUIRED_BITS); \
733  ZyanU8 constr_REG ZYAN_BITFIELD(ZYDIS_REG_CONSTRAINTS_REQUIRED_BITS); \
734  ZyanU8 constr_RM ZYAN_BITFIELD(ZYDIS_REG_CONSTRAINTS_REQUIRED_BITS); \
735  ZyanU8 cpu_state ZYAN_BITFIELD(ZYDIS_RW_ACTION_REQUIRED_BITS); \
736  ZyanU8 fpu_state ZYAN_BITFIELD(ZYDIS_RW_ACTION_REQUIRED_BITS); \
737  ZyanU8 xmm_state ZYAN_BITFIELD(ZYDIS_RW_ACTION_REQUIRED_BITS)
738 #else
739 # define ZYDIS_INSTRUCTION_DEFINITION_BASE \
740  ZyanU16 mnemonic ZYAN_BITFIELD(ZYDIS_MNEMONIC_REQUIRED_BITS); \
741  ZyanU8 operand_size_map ZYAN_BITFIELD( 3); \
742  ZyanU8 address_size_map ZYAN_BITFIELD( 2); \
743  ZyanBool requires_protected_mode ZYAN_BITFIELD( 1); \
744  ZyanU8 constr_REG ZYAN_BITFIELD(ZYDIS_REG_CONSTRAINTS_REQUIRED_BITS); \
745  ZyanU8 constr_RM ZYAN_BITFIELD(ZYDIS_REG_CONSTRAINTS_REQUIRED_BITS)
746 #endif
747 
748 #define ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR \
749  ZYDIS_INSTRUCTION_DEFINITION_BASE; \
750  ZyanU8 constr_NDSNDD ZYAN_BITFIELD(ZYDIS_REG_CONSTRAINTS_REQUIRED_BITS)
751 
752 #define ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR_INTEL \
753  ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR; \
754  ZyanBool is_gather ZYAN_BITFIELD( 1)
755 
760 {
763 
768 {
770 #ifndef ZYDIS_MINIMAL_MODE
771  ZyanBool is_privileged ZYAN_BITFIELD( 1);
772 #endif
773  ZyanBool accepts_LOCK ZYAN_BITFIELD( 1);
774 #ifndef ZYDIS_MINIMAL_MODE
775  ZyanBool accepts_REP ZYAN_BITFIELD( 1);
776  ZyanBool accepts_REPEREPZ ZYAN_BITFIELD( 1);
777  ZyanBool accepts_REPNEREPNZ ZYAN_BITFIELD( 1);
778  ZyanBool accepts_BOUND ZYAN_BITFIELD( 1);
779  ZyanBool accepts_XACQUIRE ZYAN_BITFIELD( 1);
780  ZyanBool accepts_XRELEASE ZYAN_BITFIELD( 1);
781  ZyanBool accepts_hle_without_lock ZYAN_BITFIELD( 1);
782  ZyanBool accepts_branch_hints ZYAN_BITFIELD( 1);
783  ZyanBool accepts_segment ZYAN_BITFIELD( 1);
784 #endif
786 
791 {
794 
799 {
802 
803 // MSVC does not correctly execute the `pragma pack(1)` compiler-directive, if we use the correct
804 // enum types
806 
811 {
813 #ifndef ZYDIS_MINIMAL_MODE
815 #endif
817 
818 #ifndef ZYDIS_DISABLE_AVX512
819 
820 // MSVC does not correctly execute the `pragma pack(1)` compiler-directive, if we use the correct
821 // enum types
829 
834 {
836 #ifndef ZYDIS_MINIMAL_MODE
841 #endif
843  ZyanBool accepts_zero_mask ZYAN_BITFIELD( 1);
844 #ifndef ZYDIS_MINIMAL_MODE
847 #endif
849 #endif
850 
851 #ifndef ZYDIS_DISABLE_KNC
852 
853 // MSVC does not correctly execute the `pragma pack(1)` compiler-directive, if we use the correct
854 // enum types
858 
863 {
867 #ifndef ZYDIS_MINIMAL_MODE
868  ZyanBool has_element_granularity ZYAN_BITFIELD( 1);
870 #endif
872 #endif
873 
874 /* ---------------------------------------------------------------------------------------------- */
875 /* Accessed CPU flags */
876 /* ---------------------------------------------------------------------------------------------- */
877 
878 typedef struct ZydisAccessedFlags_
879 {
882 
883 /* ---------------------------------------------------------------------------------------------- */
884 
885 #pragma pack(pop)
886 
887 #ifdef ZYAN_MSVC
888 # pragma warning(pop)
889 #endif
890 
891 /* ============================================================================================== */
892 /* Functions */
893 /* ============================================================================================== */
894 
895 /* ---------------------------------------------------------------------------------------------- */
896 /* Instruction definition */
897 /* ---------------------------------------------------------------------------------------------- */
898 
908  ZyanU16 id, const ZydisInstructionDefinition** definition);
909 
910 /* ---------------------------------------------------------------------------------------------- */
911 /* Operand definition */
912 /* ---------------------------------------------------------------------------------------------- */
913 
914 #ifndef ZYDIS_MINIMAL_MODE
924 ZYDIS_NO_EXPORT ZyanU8 ZydisGetOperandDefinitions(const ZydisInstructionDefinition* definition,
925  const ZydisOperandDefinition** operand);
926 #endif
927 
928 /* ---------------------------------------------------------------------------------------------- */
929 /* Element info */
930 /* ---------------------------------------------------------------------------------------------- */
931 
932 #ifndef ZYDIS_MINIMAL_MODE
941  ZydisElementSize* size);
942 #endif
943 
944 /* ---------------------------------------------------------------------------------------------- */
945 /* Accessed CPU flags */
946 /* ---------------------------------------------------------------------------------------------- */
947 
948 #ifndef ZYDIS_MINIMAL_MODE
957 ZYDIS_NO_EXPORT ZyanBool ZydisGetAccessedFlags(const ZydisInstructionDefinition* definition,
958  const ZydisAccessedFlags** flags);
959 #endif
960 
961 /* ---------------------------------------------------------------------------------------------- */
962 
963 /* ============================================================================================== */
964 
965 #ifdef __cplusplus
966 }
967 #endif
968 
969 #endif /* ZYDIS_INTERNAL_SHAREDDATA_H */
Defines the basic ZydisDecodedInstruction and ZydisDecodedOperand structs.
@ ZYDIS_EXCEPTION_CLASS_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: DecoderTypes.h:675
@ ZYDIS_BRANCH_TYPE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: DecoderTypes.h:614
@ ZYDIS_CPUFLAG_MAX_VALUE
Maximum value of this enum.
Definition: DecoderTypes.h:530
enum ZydisCPUFlagAction_ ZydisCPUFlagAction
Defines the ZydisCPUFlagAction enum.
@ ZYDIS_ISA_EXT_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: EnumISAExt.h:88
@ ZYDIS_ISA_SET_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: EnumISASet.h:177
@ ZYDIS_CATEGORY_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: EnumInstructionCategory.h:113
@ ZYDIS_MNEMONIC_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: EnumMnemonic.h:1620
@ ZYDIS_REGISTER_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: EnumRegister.h:291
Mnemonic constant definitions and helper functions.
Utility functions and constants for registers.
enum ZydisSemanticOperandType_ ZydisSemanticOperandType
Defines the ZydisSemanticOperandType enum.
enum ZydisEVEXStaticBroadcast_ ZydisEVEXStaticBroadcast
Defines the ZydisEVEXStaticBroadcast enum.
struct ZydisInstructionDefinition_ ZydisInstructionDefinition
Defines the ZydisInstructionDefinition struct.
ZydisEVEXTupleType_
Defines the ZydisEVEXTupleType enum.
Definition: SharedData.h:376
@ ZYDIS_TUPLETYPE_M128
Mem128.
Definition: SharedData.h:433
@ ZYDIS_TUPLETYPE_GSCAT
Gather / Scatter.
Definition: SharedData.h:405
@ ZYDIS_TUPLETYPE_T1F
Tuple1 Fixed.
Definition: SharedData.h:397
@ ZYDIS_TUPLETYPE_T8
Tuple8.
Definition: SharedData.h:417
@ ZYDIS_TUPLETYPE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:442
@ ZYDIS_TUPLETYPE_T4
Tuple4.
Definition: SharedData.h:413
@ ZYDIS_TUPLETYPE_T1S
Tuple1 Scalar.
Definition: SharedData.h:393
@ ZYDIS_TUPLETYPE_FV
Full Vector.
Definition: SharedData.h:381
@ ZYDIS_TUPLETYPE_OVM
OctMem.
Definition: SharedData.h:429
@ ZYDIS_TUPLETYPE_FVM
Full Vector Mem.
Definition: SharedData.h:389
@ ZYDIS_TUPLETYPE_QVM
QuarterMem.
Definition: SharedData.h:425
@ ZYDIS_TUPLETYPE_HV
Half Vector.
Definition: SharedData.h:385
@ ZYDIS_TUPLETYPE_DUP
MOVDDUP.
Definition: SharedData.h:437
@ ZYDIS_TUPLETYPE_INVALID
Definition: SharedData.h:377
@ ZYDIS_TUPLETYPE_HVM
Half Mem.
Definition: SharedData.h:421
@ ZYDIS_TUPLETYPE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:446
@ ZYDIS_TUPLETYPE_T1_4X
Tuple1 4x32.
Definition: SharedData.h:401
@ ZYDIS_TUPLETYPE_T2
Tuple2.
Definition: SharedData.h:409
enum ZydisMVEXFunctionality_ ZydisMVEXFunctionality
Defines the ZydisMVEXFunctionality enum.
ZydisMVEXFunctionality_
Defines the ZydisMVEXFunctionality enum.
Definition: SharedData.h:455
@ ZYDIS_MVEX_FUNC_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:564
@ ZYDIS_MVEX_FUNC_F_32
No special operation (32bit float elements).
Definition: SharedData.h:475
@ ZYDIS_MVEX_FUNC_SF_64
Sf64(mem).
Definition: SharedData.h:511
@ ZYDIS_MVEX_FUNC_DI_32
Di32.
Definition: SharedData.h:555
@ ZYDIS_MVEX_FUNC_SI_32_BCST_4TO16
Si32(mem) broadcast 4to16 only.
Definition: SharedData.h:523
@ ZYDIS_MVEX_FUNC_SF_32_BCST
Sf32(mem) broadcast only.
Definition: SharedData.h:503
@ ZYDIS_MVEX_FUNC_DF_64
Df64.
Definition: SharedData.h:551
@ ZYDIS_MVEX_FUNC_F_64
No special operation (64bit float elements).
Definition: SharedData.h:483
@ ZYDIS_MVEX_FUNC_SI_32_BCST
Si32(mem) broadcast only.
Definition: SharedData.h:519
@ ZYDIS_MVEX_FUNC_INVALID
MVEX.SSS must be 000b.
Definition: SharedData.h:463
@ ZYDIS_MVEX_FUNC_I_64
No special operation (64bit uint elements).
Definition: SharedData.h:487
@ ZYDIS_MVEX_FUNC_SI_32
Si32(mem).
Definition: SharedData.h:515
@ ZYDIS_MVEX_FUNC_SWIZZLE_64
Sf64(reg) or Si64(reg).
Definition: SharedData.h:495
@ ZYDIS_MVEX_FUNC_SI_64
Si64(mem).
Definition: SharedData.h:527
@ ZYDIS_MVEX_FUNC_I_32
No special operation (32bit uint elements).
Definition: SharedData.h:479
@ ZYDIS_MVEX_FUNC_SF_32
Sf32(mem).
Definition: SharedData.h:499
@ ZYDIS_MVEX_FUNC_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:568
@ ZYDIS_MVEX_FUNC_SAE
MVEX.SSS controls sae functionality.
Definition: SharedData.h:471
@ ZYDIS_MVEX_FUNC_SWIZZLE_32
Sf32(reg) or Si32(reg).
Definition: SharedData.h:491
@ ZYDIS_MVEX_FUNC_UI_64
Ui64.
Definition: SharedData.h:543
@ ZYDIS_MVEX_FUNC_SF_32_BCST_4TO16
Sf32(mem) broadcast 4to16 only.
Definition: SharedData.h:507
@ ZYDIS_MVEX_FUNC_DI_64
Di64.
Definition: SharedData.h:559
@ ZYDIS_MVEX_FUNC_DF_32
Df32.
Definition: SharedData.h:547
@ ZYDIS_MVEX_FUNC_UI_32
Ui32.
Definition: SharedData.h:539
@ ZYDIS_MVEX_FUNC_IGNORED
The MVEX.SSS value is ignored.
Definition: SharedData.h:459
@ ZYDIS_MVEX_FUNC_UF_32
Uf32.
Definition: SharedData.h:531
@ ZYDIS_MVEX_FUNC_UF_64
Uf64.
Definition: SharedData.h:535
@ ZYDIS_MVEX_FUNC_RC
MVEX.SSS controls embedded-rounding functionality.
Definition: SharedData.h:467
enum ZydisImplicitMemBase_ ZydisImplicitMemBase
Defines the ZydisImplicitMemBase enum.
ZydisEVEXFunctionality_
Defines the ZydisEVEXFunctionality enum.
Definition: SharedData.h:345
@ ZYDIS_EVEX_FUNC_INVALID
Definition: SharedData.h:346
@ ZYDIS_EVEX_FUNC_SAE
EVEX.b enables sae functionality.
Definition: SharedData.h:358
@ ZYDIS_EVEX_FUNC_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:363
@ ZYDIS_EVEX_FUNC_BC
EVEX.b enables broadcast functionality.
Definition: SharedData.h:350
@ ZYDIS_EVEX_FUNC_RC
EVEX.b enables embedded-rounding functionality.
Definition: SharedData.h:354
@ ZYDIS_EVEX_FUNC_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:367
enum ZydisEVEXFunctionality_ ZydisEVEXFunctionality
Defines the ZydisEVEXFunctionality enum.
enum ZydisImplicitRegisterType_ ZydisImplicitRegisterType
Defines the ZydisImplicitRegisterType enum.
ZydisImplicitRegisterType_
Defines the ZydisImplicitRegisterType enum.
Definition: SharedData.h:151
@ ZYDIS_IMPLREG_TYPE_IP_ASZ
Definition: SharedData.h:156
@ ZYDIS_IMPLREG_TYPE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:167
@ ZYDIS_IMPLREG_TYPE_GPR_ASZ
Definition: SharedData.h:154
@ ZYDIS_IMPLREG_TYPE_STATIC
Definition: SharedData.h:152
@ ZYDIS_IMPLREG_TYPE_GPR_OSZ
Definition: SharedData.h:153
@ ZYDIS_IMPLREG_TYPE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:163
@ ZYDIS_IMPLREG_TYPE_IP_SSZ
Definition: SharedData.h:157
@ ZYDIS_IMPLREG_TYPE_FLAGS_SSZ
Definition: SharedData.h:158
@ ZYDIS_IMPLREG_TYPE_GPR_SSZ
Definition: SharedData.h:155
ZydisInternalElementType_
Defines the ZydisInternalElementType enum.
Definition: SharedData.h:110
@ ZYDIS_IELEMENT_TYPE_STRUCT
Definition: SharedData.h:113
@ ZYDIS_IELEMENT_TYPE_FLOAT64
Definition: SharedData.h:129
@ ZYDIS_IELEMENT_TYPE_INT
Definition: SharedData.h:114
@ ZYDIS_IELEMENT_TYPE_FLOAT16
Definition: SharedData.h:127
@ ZYDIS_IELEMENT_TYPE_UINT32
Definition: SharedData.h:123
@ ZYDIS_IELEMENT_TYPE_UINT8
Definition: SharedData.h:121
@ ZYDIS_IELEMENT_TYPE_FLOAT80
Definition: SharedData.h:130
@ ZYDIS_IELEMENT_TYPE_UINT16
Definition: SharedData.h:122
@ ZYDIS_IELEMENT_TYPE_VARIABLE
Definition: SharedData.h:112
@ ZYDIS_IELEMENT_TYPE_UINT64
Definition: SharedData.h:124
@ ZYDIS_IELEMENT_TYPE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:142
@ ZYDIS_IELEMENT_TYPE_UINT256
Definition: SharedData.h:126
@ ZYDIS_IELEMENT_TYPE_INT16
Definition: SharedData.h:118
@ ZYDIS_IELEMENT_TYPE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:138
@ ZYDIS_IELEMENT_TYPE_INT8
Definition: SharedData.h:117
@ ZYDIS_IELEMENT_TYPE_BCD80
Definition: SharedData.h:131
@ ZYDIS_IELEMENT_TYPE_INT32
Definition: SharedData.h:119
@ ZYDIS_IELEMENT_TYPE_UINT
Definition: SharedData.h:115
@ ZYDIS_IELEMENT_TYPE_CC5
Definition: SharedData.h:133
@ ZYDIS_IELEMENT_TYPE_INT1
Definition: SharedData.h:116
@ ZYDIS_IELEMENT_TYPE_FLOAT32
Definition: SharedData.h:128
@ ZYDIS_IELEMENT_TYPE_INT64
Definition: SharedData.h:120
@ ZYDIS_IELEMENT_TYPE_INVALID
Definition: SharedData.h:111
@ ZYDIS_IELEMENT_TYPE_UINT128
Definition: SharedData.h:125
@ ZYDIS_IELEMENT_TYPE_CC3
Definition: SharedData.h:132
ZydisRegisterConstraint_
Defines the ZydisRegisterConstraint enum.
Definition: SharedData.h:270
@ ZYDIS_REG_CONSTRAINTS_GPR
Definition: SharedData.h:273
@ ZYDIS_REG_CONSTRAINTS_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:290
@ ZYDIS_REG_CONSTRAINTS_NO_REL
Definition: SharedData.h:281
@ ZYDIS_REG_CONSTRAINTS_CR
Definition: SharedData.h:276
@ ZYDIS_REG_CONSTRAINTS_SR
Definition: SharedData.h:275
@ ZYDIS_REG_CONSTRAINTS_VSIB
Definition: SharedData.h:280
@ ZYDIS_REG_CONSTRAINTS_UNUSED
Definition: SharedData.h:271
@ ZYDIS_REG_CONSTRAINTS_BND
Definition: SharedData.h:279
@ ZYDIS_REG_CONSTRAINTS_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:286
@ ZYDIS_REG_CONSTRAINTS_NONE
Definition: SharedData.h:272
@ ZYDIS_REG_CONSTRAINTS_SR_DEST
Definition: SharedData.h:274
@ ZYDIS_REG_CONSTRAINTS_DR
Definition: SharedData.h:277
@ ZYDIS_REG_CONSTRAINTS_MASK
Definition: SharedData.h:278
ZYDIS_NO_EXPORT ZyanU8 ZydisGetOperandDefinitions(const ZydisInstructionDefinition *definition, const ZydisOperandDefinition **operand)
Returns the the operand-definitions for the given instruction-definition.
enum ZydisMaskOverride_ ZydisMaskOverride
Defines the ZydisMaskOverride enum.
struct ZydisInstructionDefinitionVEX_ ZydisInstructionDefinitionVEX
Defines the ZydisInstructionDefinitionVEX struct.
enum ZydisReadWriteAction_ ZydisReadWriteAction
Defines the ZydisReadWriteAction enum.
ZydisInternalElementSize_
Defines the ZydisInternalElementSize enum.
Definition: SharedData.h:321
@ ZYDIS_IELEMENT_SIZE_INVALID
Definition: SharedData.h:322
@ ZYDIS_IELEMENT_SIZE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:332
@ ZYDIS_IELEMENT_SIZE_128
Definition: SharedData.h:327
@ ZYDIS_IELEMENT_SIZE_32
Definition: SharedData.h:325
@ ZYDIS_IELEMENT_SIZE_16
Definition: SharedData.h:324
@ ZYDIS_IELEMENT_SIZE_64
Definition: SharedData.h:326
@ ZYDIS_IELEMENT_SIZE_8
Definition: SharedData.h:323
@ ZYDIS_IELEMENT_SIZE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:336
ZydisVEXStaticBroadcast
Defines the ZydisVEXStaticBroadcast enum.
Definition: SharedData.h:577
@ ZYDIS_VEX_STATIC_BROADCAST_1_TO_4
Definition: SharedData.h:580
@ ZYDIS_VEX_STATIC_BROADCAST_1_TO_8
Definition: SharedData.h:581
@ ZYDIS_VEX_STATIC_BROADCAST_1_TO_2
Definition: SharedData.h:579
@ ZYDIS_VEX_STATIC_BROADCAST_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:593
@ ZYDIS_VEX_STATIC_BROADCAST_1_TO_32
Definition: SharedData.h:583
@ ZYDIS_VEX_STATIC_BROADCAST_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:589
@ ZYDIS_VEX_STATIC_BROADCAST_1_TO_16
Definition: SharedData.h:582
@ ZYDIS_VEX_STATIC_BROADCAST_2_TO_4
Definition: SharedData.h:584
@ ZYDIS_VEX_STATIC_BROADCAST_NONE
Definition: SharedData.h:578
struct ZydisInstructionDefinition3DNOW_ ZydisInstructionDefinition3DNOW
Defines the ZydisInstructionDefinition3DNOW struct.
ZYDIS_NO_EXPORT void ZydisGetInstructionDefinition(ZydisInstructionEncoding encoding, ZyanU16 id, const ZydisInstructionDefinition **definition)
Returns the instruction-definition with the given encoding and id.
ZYDIS_NO_EXPORT ZyanBool ZydisGetAccessedFlags(const ZydisInstructionDefinition *definition, const ZydisAccessedFlags **flags)
Returns the the operand-definitions for the given instruction-definition.
enum ZydisInternalVectorLength_ ZydisInternalVectorLength
Defines the ZydisInternalVectorLength enum.
ZydisMaskOverride_
Defines the ZydisMaskOverride enum.
Definition: SharedData.h:691
@ ZYDIS_MASK_OVERRIDE_DEFAULT
Definition: SharedData.h:692
@ ZYDIS_MASK_OVERRIDE_ZEROING
Definition: SharedData.h:693
@ ZYDIS_MASK_OVERRIDE_CONTROL
Definition: SharedData.h:694
@ ZYDIS_MASK_OVERRIDE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:703
@ ZYDIS_MASK_OVERRIDE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:699
ZydisMaskPolicy_
Defines the ZydisMaskPolicy enum.
Definition: SharedData.h:659
@ ZYDIS_MASK_POLICY_INVALID
Definition: SharedData.h:660
@ ZYDIS_MASK_POLICY_FORBIDDEN
The instruction does not allow a mask-register other than the default-mask (K0).
Definition: SharedData.h:673
@ ZYDIS_MASK_POLICY_ALLOWED
The instruction accepts mask-registers other than the default-mask (K0), but does not require them.
Definition: SharedData.h:665
@ ZYDIS_MASK_POLICY_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:682
@ ZYDIS_MASK_POLICY_REQUIRED
The instruction requires a mask-register other than the default-mask (K0).
Definition: SharedData.h:669
@ ZYDIS_MASK_POLICY_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:678
enum ZydisEVEXTupleType_ ZydisEVEXTupleType
Defines the ZydisEVEXTupleType enum.
enum ZydisMVEXStaticBroadcast_ ZydisMVEXStaticBroadcast
Defines the ZydisMVEXStaticBroadcast enum.
ZYDIS_NO_EXPORT void ZydisGetElementInfo(ZydisInternalElementType element, ZydisElementType *type, ZydisElementSize *size)
Returns the actual type and size of an internal element-type.
ZydisMVEXStaticBroadcast_
Defines the ZydisMVEXStaticBroadcast enum.
Definition: SharedData.h:635
@ ZYDIS_MVEX_STATIC_BROADCAST_4_TO_8
Definition: SharedData.h:639
@ ZYDIS_MVEX_STATIC_BROADCAST_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:645
@ ZYDIS_MVEX_STATIC_BROADCAST_4_TO_16
Definition: SharedData.h:640
@ ZYDIS_MVEX_STATIC_BROADCAST_1_TO_16
Definition: SharedData.h:638
@ ZYDIS_MVEX_STATIC_BROADCAST_NONE
Definition: SharedData.h:636
@ ZYDIS_MVEX_STATIC_BROADCAST_1_TO_8
Definition: SharedData.h:637
@ ZYDIS_MVEX_STATIC_BROADCAST_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:649
struct ZydisOperandDefinition_ ZydisOperandDefinition
Defines the ZydisOperandDefinition struct.
ZydisInternalVectorLength_
Defines the ZydisInternalVectorLength enum.
Definition: SharedData.h:299
@ ZYDIS_IVECTOR_LENGTH_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:312
@ ZYDIS_IVECTOR_LENGTH_DEFAULT
Definition: SharedData.h:300
@ ZYDIS_IVECTOR_LENGTH_FIXED_256
Definition: SharedData.h:302
@ ZYDIS_IVECTOR_LENGTH_FIXED_128
Definition: SharedData.h:301
@ ZYDIS_IVECTOR_LENGTH_FIXED_512
Definition: SharedData.h:303
@ ZYDIS_IVECTOR_LENGTH_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:308
struct ZydisInstructionDefinitionMVEX_ ZydisInstructionDefinitionMVEX
Defines the ZydisInstructionDefinitionMVEX struct.
ZydisReadWriteAction_
Defines the ZydisReadWriteAction enum.
Definition: SharedData.h:248
@ ZYDIS_RW_ACTION_READ
Definition: SharedData.h:250
@ ZYDIS_RW_ACTION_NONE
Definition: SharedData.h:249
@ ZYDIS_RW_ACTION_READWRITE
Definition: SharedData.h:252
@ ZYDIS_RW_ACTION_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:261
@ ZYDIS_RW_ACTION_WRITE
Definition: SharedData.h:251
@ ZYDIS_RW_ACTION_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:257
ZydisImplicitMemBase_
Defines the ZydisImplicitMemBase enum.
Definition: SharedData.h:176
@ ZYDIS_IMPLMEM_BASE_AGPR_RM
Definition: SharedData.h:178
@ ZYDIS_IMPLMEM_BASE_AGPR_REG
Definition: SharedData.h:177
@ ZYDIS_IMPLMEM_BASE_ABP
Definition: SharedData.h:183
@ ZYDIS_IMPLMEM_BASE_ASI
Definition: SharedData.h:184
@ ZYDIS_IMPLMEM_BASE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:190
@ ZYDIS_IMPLMEM_BASE_ABX
Definition: SharedData.h:181
@ ZYDIS_IMPLMEM_BASE_AAX
Definition: SharedData.h:179
@ ZYDIS_IMPLMEM_BASE_ADI
Definition: SharedData.h:185
@ ZYDIS_IMPLMEM_BASE_ASP
Definition: SharedData.h:182
@ ZYDIS_IMPLMEM_BASE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:194
@ ZYDIS_IMPLMEM_BASE_ADX
Definition: SharedData.h:180
enum ZydisMaskPolicy_ ZydisMaskPolicy
Defines the ZydisMaskPolicy enum.
ZydisSemanticOperandType_
Defines the ZydisSemanticOperandType enum.
Definition: SharedData.h:60
@ ZYDIS_SEMANTIC_OPTYPE_MMX
Definition: SharedData.h:74
@ ZYDIS_SEMANTIC_OPTYPE_ZMM
Definition: SharedData.h:77
@ ZYDIS_SEMANTIC_OPTYPE_BND
Definition: SharedData.h:78
@ ZYDIS_SEMANTIC_OPTYPE_GPR32_32_64
Definition: SharedData.h:70
@ ZYDIS_SEMANTIC_OPTYPE_MEM
Definition: SharedData.h:83
@ ZYDIS_SEMANTIC_OPTYPE_AGEN
Definition: SharedData.h:90
@ ZYDIS_SEMANTIC_OPTYPE_CR
Definition: SharedData.h:80
@ ZYDIS_SEMANTIC_OPTYPE_DR
Definition: SharedData.h:81
@ ZYDIS_SEMANTIC_OPTYPE_IMPLICIT_MEM
Definition: SharedData.h:63
@ ZYDIS_SEMANTIC_OPTYPE_GPR32
Definition: SharedData.h:67
@ ZYDIS_SEMANTIC_OPTYPE_MEM_VSIBY
Definition: SharedData.h:85
@ ZYDIS_SEMANTIC_OPTYPE_FPR
Definition: SharedData.h:73
@ ZYDIS_SEMANTIC_OPTYPE_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:97
@ ZYDIS_SEMANTIC_OPTYPE_XMM
Definition: SharedData.h:75
@ ZYDIS_SEMANTIC_OPTYPE_GPR8
Definition: SharedData.h:65
@ ZYDIS_SEMANTIC_OPTYPE_MEM_VSIBX
Definition: SharedData.h:84
@ ZYDIS_SEMANTIC_OPTYPE_MEM_VSIBZ
Definition: SharedData.h:86
@ ZYDIS_SEMANTIC_OPTYPE_GPR16
Definition: SharedData.h:66
@ ZYDIS_SEMANTIC_OPTYPE_MIB
Definition: SharedData.h:92
@ ZYDIS_SEMANTIC_OPTYPE_SREG
Definition: SharedData.h:79
@ ZYDIS_SEMANTIC_OPTYPE_IMM
Definition: SharedData.h:87
@ ZYDIS_SEMANTIC_OPTYPE_MOFFS
Definition: SharedData.h:91
@ ZYDIS_SEMANTIC_OPTYPE_GPR64
Definition: SharedData.h:68
@ ZYDIS_SEMANTIC_OPTYPE_IMPLICIT_IMM1
Definition: SharedData.h:64
@ ZYDIS_SEMANTIC_OPTYPE_GPR16_32_32
Definition: SharedData.h:71
@ ZYDIS_SEMANTIC_OPTYPE_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:101
@ ZYDIS_SEMANTIC_OPTYPE_UNUSED
Definition: SharedData.h:61
@ ZYDIS_SEMANTIC_OPTYPE_IMPLICIT_REG
Definition: SharedData.h:62
@ ZYDIS_SEMANTIC_OPTYPE_GPR16_32_64
Definition: SharedData.h:69
@ ZYDIS_SEMANTIC_OPTYPE_YMM
Definition: SharedData.h:76
@ ZYDIS_SEMANTIC_OPTYPE_REL
Definition: SharedData.h:88
@ ZYDIS_SEMANTIC_OPTYPE_PTR
Definition: SharedData.h:89
@ ZYDIS_SEMANTIC_OPTYPE_MASK
Definition: SharedData.h:82
@ ZYDIS_SEMANTIC_OPTYPE_GPR_ASZ
Definition: SharedData.h:72
struct ZydisInstructionDefinitionXOP_ ZydisInstructionDefinitionXOP
Defines the ZydisInstructionDefinitionXOP struct.
ZYAN_STATIC_ASSERT(ZYDIS_SEMANTIC_OPTYPE_REQUIRED_BITS<=8)
struct ZydisAccessedFlags_ ZydisAccessedFlags
enum ZydisInternalElementType_ ZydisInternalElementType
Defines the ZydisInternalElementType enum.
enum ZydisInternalElementSize_ ZydisInternalElementSize
Defines the ZydisInternalElementSize enum.
struct ZydisInstructionDefinitionEVEX_ ZydisInstructionDefinitionEVEX
Defines the ZydisInstructionDefinitionEVEX struct.
enum ZydisRegisterConstraint_ ZydisRegisterConstraint
Defines the ZydisRegisterConstraint enum.
ZydisEVEXStaticBroadcast_
Defines the ZydisEVEXStaticBroadcast enum.
Definition: SharedData.h:603
@ ZYDIS_EVEX_STATIC_BROADCAST_1_TO_4
Definition: SharedData.h:606
@ ZYDIS_EVEX_STATIC_BROADCAST_8_TO_16
Definition: SharedData.h:616
@ ZYDIS_EVEX_STATIC_BROADCAST_1_TO_16
Definition: SharedData.h:608
@ ZYDIS_EVEX_STATIC_BROADCAST_4_TO_8
Definition: SharedData.h:614
@ ZYDIS_EVEX_STATIC_BROADCAST_2_TO_4
Definition: SharedData.h:611
@ ZYDIS_EVEX_STATIC_BROADCAST_1_TO_32
Definition: SharedData.h:609
@ ZYDIS_EVEX_STATIC_BROADCAST_4_TO_16
Definition: SharedData.h:615
@ ZYDIS_EVEX_STATIC_BROADCAST_MAX_VALUE
Maximum value of this enum.
Definition: SharedData.h:621
@ ZYDIS_EVEX_STATIC_BROADCAST_1_TO_2
Definition: SharedData.h:605
@ ZYDIS_EVEX_STATIC_BROADCAST_1_TO_64
Definition: SharedData.h:610
@ ZYDIS_EVEX_STATIC_BROADCAST_2_TO_8
Definition: SharedData.h:612
@ ZYDIS_EVEX_STATIC_BROADCAST_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedData.h:625
@ ZYDIS_EVEX_STATIC_BROADCAST_1_TO_8
Definition: SharedData.h:607
@ ZYDIS_EVEX_STATIC_BROADCAST_NONE
Definition: SharedData.h:604
@ ZYDIS_EVEX_STATIC_BROADCAST_2_TO_16
Definition: SharedData.h:613
struct ZydisInstructionDefinitionLEGACY_ ZydisInstructionDefinitionLEGACY
Defines the ZydisInstructionDefinitionLEGACY struct.
Defines decoder/encoder-shared macros and types.
@ ZYDIS_OPERAND_VISIBILITY_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedTypes.h:316
enum ZydisInstructionEncoding_ ZydisInstructionEncoding
Defines the ZydisInstructionEncoding enum.
@ ZYDIS_OPERAND_ENCODING_REQUIRED_BITS
The minimum number of bits required to represent all values of this enum.
Definition: SharedTypes.h:283
@ ZYDIS_OPERAND_ACTION_REQUIRED_BITS
The minimum number of bits required to represent all values of this bitset.
Definition: SharedTypes.h:391
enum ZydisElementType_ ZydisElementType
Defines the ZydisElementType enum.
ZyanU16 ZydisElementSize
Defines the ZydisElementSize datatype.
Definition: SharedTypes.h:189
Definition: SharedData.h:879
ZydisCPUFlagAction action[ZYDIS_CPUFLAG_MAX_VALUE+1]
Definition: SharedData.h:880
Defines the ZydisInstructionDefinition3DNOW struct.
Definition: SharedData.h:791
ZYDIS_INSTRUCTION_DEFINITION_BASE
Definition: SharedData.h:792
Defines the ZydisInstructionDefinitionEVEX struct.
Definition: SharedData.h:834
ZyanU8 tuple_type ZYAN_BITFIELD(ZYDIS_TUPLETYPE_REQUIRED_BITS)
ZyanU8 functionality ZYAN_BITFIELD(ZYDIS_EVEX_FUNC_REQUIRED_BITS)
ZyanU8 mask_override ZYAN_BITFIELD(ZYDIS_MASK_OVERRIDE_REQUIRED_BITS)
ZyanU8 vector_length ZYAN_BITFIELD(ZYDIS_IVECTOR_LENGTH_REQUIRED_BITS)
ZyanBool accepts_zero_mask ZYAN_BITFIELD(1)
ZyanU8 broadcast ZYAN_BITFIELD(ZYDIS_EVEX_STATIC_BROADCAST_REQUIRED_BITS)
ZyanU8 element_size ZYAN_BITFIELD(ZYDIS_IELEMENT_SIZE_REQUIRED_BITS)
ZyanU8 mask_policy ZYAN_BITFIELD(ZYDIS_MASK_POLICY_REQUIRED_BITS)
ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR_INTEL
Definition: SharedData.h:835
Defines the ZydisInstructionDefinitionLEGACY struct.
Definition: SharedData.h:768
ZyanBool accepts_segment ZYAN_BITFIELD(1)
ZyanBool accepts_branch_hints ZYAN_BITFIELD(1)
ZyanBool accepts_XACQUIRE ZYAN_BITFIELD(1)
ZyanBool accepts_XRELEASE ZYAN_BITFIELD(1)
ZYDIS_INSTRUCTION_DEFINITION_BASE
Definition: SharedData.h:769
ZyanBool accepts_REPNEREPNZ ZYAN_BITFIELD(1)
ZyanBool accepts_BOUND ZYAN_BITFIELD(1)
ZyanBool accepts_LOCK ZYAN_BITFIELD(1)
ZyanBool accepts_REP ZYAN_BITFIELD(1)
ZyanBool accepts_REPEREPZ ZYAN_BITFIELD(1)
ZyanBool accepts_hle_without_lock ZYAN_BITFIELD(1)
ZyanBool is_privileged ZYAN_BITFIELD(1)
Defines the ZydisInstructionDefinitionMVEX struct.
Definition: SharedData.h:863
ZyanBool has_element_granularity ZYAN_BITFIELD(1)
ZyanU8 broadcast ZYAN_BITFIELD(ZYDIS_MVEX_STATIC_BROADCAST_REQUIRED_BITS)
ZyanU8 functionality ZYAN_BITFIELD(ZYDIS_MVEX_FUNC_REQUIRED_BITS)
ZyanU8 mask_policy ZYAN_BITFIELD(ZYDIS_MASK_POLICY_REQUIRED_BITS)
ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR_INTEL
Definition: SharedData.h:864
Defines the ZydisInstructionDefinitionVEX struct.
Definition: SharedData.h:811
ZyanU8 broadcast ZYAN_BITFIELD(ZYDIS_VEX_STATIC_BROADCAST_REQUIRED_BITS)
ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR_INTEL
Definition: SharedData.h:812
Defines the ZydisInstructionDefinitionXOP struct.
Definition: SharedData.h:799
ZYDIS_INSTRUCTION_DEFINITION_BASE_VECTOR
Definition: SharedData.h:800
Defines the ZydisInstructionDefinition struct.
Definition: SharedData.h:760
ZYDIS_INSTRUCTION_DEFINITION_BASE
Definition: SharedData.h:761
Defines the ZydisOperandDefinition struct.
Definition: SharedData.h:214
ZyanU8 type ZYAN_BITFIELD(ZYDIS_SEMANTIC_OPTYPE_REQUIRED_BITS)
union ZydisOperandDefinition_::@3 op
ZyanU8 element_type ZYAN_BITFIELD(ZYDIS_IELEMENT_TYPE_REQUIRED_BITS)
struct ZydisOperandDefinition_::@3::@5 mem
ZyanU8 actions ZYAN_BITFIELD(ZYDIS_OPERAND_ACTION_REQUIRED_BITS)
ZyanU8 visibility ZYAN_BITFIELD(ZYDIS_OPERAND_VISIBILITY_REQUIRED_BITS)
ZyanU16 size[3]
Definition: SharedData.h:218
union ZydisOperandDefinition_::@3::@4::@6 reg