mirror of https://github.com/x64dbg/zydis
				
				
				
			Preparations for MVEX-support and decoupling of operand-decoding
This commit is contained in:
		
							parent
							
								
									d3192a8be7
								
							
						
					
					
						commit
						e5e5899f72
					
				| 
						 | 
					@ -875,6 +875,7 @@ typedef struct ZydisInstructionInfo_
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        struct
 | 
					        struct
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            uint8_t data[ZYDIS_MAX_INSTRUCTION_LENGTH - 1]; // TODO:
 | 
				
			||||||
            uint8_t hasF0;
 | 
					            uint8_t hasF0;
 | 
				
			||||||
            uint8_t hasF3;
 | 
					            uint8_t hasF3;
 | 
				
			||||||
            uint8_t hasF2;
 | 
					            uint8_t hasF2;
 | 
				
			||||||
| 
						 | 
					@ -1079,6 +1080,68 @@ typedef struct ZydisInstructionInfo_
 | 
				
			||||||
             */
 | 
					             */
 | 
				
			||||||
            uint8_t aaa;
 | 
					            uint8_t aaa;
 | 
				
			||||||
        } evex;
 | 
					        } evex;
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					        * @brief    Detailed info about the MVEX-prefix.
 | 
				
			||||||
 | 
					        */
 | 
				
			||||||
 | 
					        struct
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   @c TRUE if the prefix got already decoded.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            ZydisBool isDecoded;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The raw bytes of the prefix.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t data[4];
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Extension of the ModRM.reg field (inverted).
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t R;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Extension of the SIB.index/vidx field (inverted).
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t X;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Extension of the ModRM.rm or SIB.base field (inverted).
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t B;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   High-16 register specifier modifier (inverted).
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t R2;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Opcode-map specifier.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t mmmm;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   64-bit operand-size promotion or opcode-extension.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t W;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   NDS register specifier (inverted).
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t vvvv;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Compressed legacy prefix.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t pp;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Non-temporal/eviction hint.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t E;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Swizzle/broadcast/up-convert/down-convert/static-rounding controls.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t SSS;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   High-16 NDS/VIDX register specifier.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t V2;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Embedded opmask register specifier.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t aaa;
 | 
				
			||||||
 | 
					        } mvex;
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
         * @brief   Detailed info about the ModRM-byte.
 | 
					         * @brief   Detailed info about the ModRM-byte.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
| 
						 | 
					@ -1101,6 +1164,64 @@ typedef struct ZydisInstructionInfo_
 | 
				
			||||||
            uint8_t index;
 | 
					            uint8_t index;
 | 
				
			||||||
            uint8_t base;
 | 
					            uint8_t base;
 | 
				
			||||||
        } sib;
 | 
					        } sib;
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * @brief   Detailed info about displacement-bytes.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        struct
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The displacement value
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            union
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int8_t sbyte;
 | 
				
			||||||
 | 
					                int16_t sword;
 | 
				
			||||||
 | 
					                int32_t sdword;
 | 
				
			||||||
 | 
					                int64_t sqword;
 | 
				
			||||||
 | 
					            } value;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The physical displacement size, in bits.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t dataSize;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The offset of the displacement data, relative to the beginning of the
 | 
				
			||||||
 | 
					             *          instruction, in bytes.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t dataOffset;
 | 
				
			||||||
 | 
					        } disp;
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * @brief   Detailed info about immediate-bytes.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        struct
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   Signals, if the immediate value is signed.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            ZydisBool isSigned;  
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The immediate value.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            union
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int8_t sbyte;
 | 
				
			||||||
 | 
					                uint8_t ubyte;
 | 
				
			||||||
 | 
					                int16_t sword;
 | 
				
			||||||
 | 
					                uint16_t uword;
 | 
				
			||||||
 | 
					                int32_t sdword;
 | 
				
			||||||
 | 
					                uint32_t udword;
 | 
				
			||||||
 | 
					                int64_t sqword;
 | 
				
			||||||
 | 
					                uint64_t uqword;
 | 
				
			||||||
 | 
					            } value;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The physical immediate size, in bits.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t dataSize;
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * @brief   The offset of the immediate data, relative to the beginning of the
 | 
				
			||||||
 | 
					             *          instruction, in bytes.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            uint8_t dataOffset;
 | 
				
			||||||
 | 
					        } imm[2];
 | 
				
			||||||
    } details;
 | 
					    } details;
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @brief   This field is intended for custom data and may be freely set by the user.
 | 
					     * @brief   This field is intended for custom data and may be freely set by the user.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue