1*1003e004SJérôme Duval /*************************************************************************************************** 2*1003e004SJérôme Duval 3*1003e004SJérôme Duval Zyan Disassembler Library (Zydis) 4*1003e004SJérôme Duval 5*1003e004SJérôme Duval Original Author : Florian Bernd 6*1003e004SJérôme Duval 7*1003e004SJérôme Duval * Permission is hereby granted, free of charge, to any person obtaining a copy 8*1003e004SJérôme Duval * of this software and associated documentation files (the "Software"), to deal 9*1003e004SJérôme Duval * in the Software without restriction, including without limitation the rights 10*1003e004SJérôme Duval * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11*1003e004SJérôme Duval * copies of the Software, and to permit persons to whom the Software is 12*1003e004SJérôme Duval * furnished to do so, subject to the following conditions: 13*1003e004SJérôme Duval * 14*1003e004SJérôme Duval * The above copyright notice and this permission notice shall be included in all 15*1003e004SJérôme Duval * copies or substantial portions of the Software. 16*1003e004SJérôme Duval * 17*1003e004SJérôme Duval * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18*1003e004SJérôme Duval * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19*1003e004SJérôme Duval * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20*1003e004SJérôme Duval * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21*1003e004SJérôme Duval * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22*1003e004SJérôme Duval * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23*1003e004SJérôme Duval * SOFTWARE. 24*1003e004SJérôme Duval 25*1003e004SJérôme Duval ***************************************************************************************************/ 26*1003e004SJérôme Duval 27*1003e004SJérôme Duval /** 28*1003e004SJérôme Duval * @file 29*1003e004SJérôme Duval * Status code definitions and check macros. 30*1003e004SJérôme Duval */ 31*1003e004SJérôme Duval 32*1003e004SJérôme Duval #ifndef ZYDIS_STATUS_H 33*1003e004SJérôme Duval #define ZYDIS_STATUS_H 34*1003e004SJérôme Duval 35*1003e004SJérôme Duval #include <Zycore/Status.h> 36*1003e004SJérôme Duval 37*1003e004SJérôme Duval #ifdef __cplusplus 38*1003e004SJérôme Duval extern "C" { 39*1003e004SJérôme Duval #endif 40*1003e004SJérôme Duval 41*1003e004SJérôme Duval /* ============================================================================================== */ 42*1003e004SJérôme Duval /* Status codes */ 43*1003e004SJérôme Duval /* ============================================================================================== */ 44*1003e004SJérôme Duval 45*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 46*1003e004SJérôme Duval /* Module IDs */ 47*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 48*1003e004SJérôme Duval 49*1003e004SJérôme Duval /** 50*1003e004SJérôme Duval * The zydis module id. 51*1003e004SJérôme Duval */ 52*1003e004SJérôme Duval #define ZYAN_MODULE_ZYDIS 0x002u 53*1003e004SJérôme Duval 54*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 55*1003e004SJérôme Duval /* Status codes */ 56*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 57*1003e004SJérôme Duval 58*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 59*1003e004SJérôme Duval /* Decoder */ 60*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 61*1003e004SJérôme Duval 62*1003e004SJérôme Duval /** 63*1003e004SJérôme Duval * An attempt was made to read data from an input data-source that has no more 64*1003e004SJérôme Duval * data available. 65*1003e004SJérôme Duval */ 66*1003e004SJérôme Duval #define ZYDIS_STATUS_NO_MORE_DATA \ 67*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x00u) 68*1003e004SJérôme Duval 69*1003e004SJérôme Duval /** 70*1003e004SJérôme Duval * An general error occured while decoding the current instruction. The 71*1003e004SJérôme Duval * instruction might be undefined. 72*1003e004SJérôme Duval */ 73*1003e004SJérôme Duval #define ZYDIS_STATUS_DECODING_ERROR \ 74*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x01u) 75*1003e004SJérôme Duval 76*1003e004SJérôme Duval /** 77*1003e004SJérôme Duval * The instruction exceeded the maximum length of 15 bytes. 78*1003e004SJérôme Duval */ 79*1003e004SJérôme Duval #define ZYDIS_STATUS_INSTRUCTION_TOO_LONG \ 80*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x02u) 81*1003e004SJérôme Duval 82*1003e004SJérôme Duval /** 83*1003e004SJérôme Duval * The instruction encoded an invalid register. 84*1003e004SJérôme Duval */ 85*1003e004SJérôme Duval #define ZYDIS_STATUS_BAD_REGISTER \ 86*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x03u) 87*1003e004SJérôme Duval 88*1003e004SJérôme Duval /** 89*1003e004SJérôme Duval * A lock-prefix (F0) was found while decoding an instruction that does not 90*1003e004SJérôme Duval * support locking. 91*1003e004SJérôme Duval */ 92*1003e004SJérôme Duval #define ZYDIS_STATUS_ILLEGAL_LOCK \ 93*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x04u) 94*1003e004SJérôme Duval 95*1003e004SJérôme Duval /** 96*1003e004SJérôme Duval * A legacy-prefix (F2, F3, 66) was found while decoding a XOP/VEX/EVEX/MVEX 97*1003e004SJérôme Duval * instruction. 98*1003e004SJérôme Duval */ 99*1003e004SJérôme Duval #define ZYDIS_STATUS_ILLEGAL_LEGACY_PFX \ 100*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x05u) 101*1003e004SJérôme Duval 102*1003e004SJérôme Duval /** 103*1003e004SJérôme Duval * A rex-prefix was found while decoding a XOP/VEX/EVEX/MVEX instruction. 104*1003e004SJérôme Duval */ 105*1003e004SJérôme Duval #define ZYDIS_STATUS_ILLEGAL_REX \ 106*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x06u) 107*1003e004SJérôme Duval 108*1003e004SJérôme Duval /** 109*1003e004SJérôme Duval * An invalid opcode-map value was found while decoding a XOP/VEX/EVEX/MVEX-prefix. 110*1003e004SJérôme Duval */ 111*1003e004SJérôme Duval #define ZYDIS_STATUS_INVALID_MAP \ 112*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x07u) 113*1003e004SJérôme Duval 114*1003e004SJérôme Duval /** 115*1003e004SJérôme Duval * An error occured while decoding the EVEX-prefix. 116*1003e004SJérôme Duval */ 117*1003e004SJérôme Duval #define ZYDIS_STATUS_MALFORMED_EVEX \ 118*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x08u) 119*1003e004SJérôme Duval 120*1003e004SJérôme Duval /** 121*1003e004SJérôme Duval * An error occured while decoding the MVEX-prefix. 122*1003e004SJérôme Duval */ 123*1003e004SJérôme Duval #define ZYDIS_STATUS_MALFORMED_MVEX \ 124*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x09u) 125*1003e004SJérôme Duval 126*1003e004SJérôme Duval /** 127*1003e004SJérôme Duval * An invalid write-mask was specified for an EVEX/MVEX instruction. 128*1003e004SJérôme Duval */ 129*1003e004SJérôme Duval #define ZYDIS_STATUS_INVALID_MASK \ 130*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x0Au) 131*1003e004SJérôme Duval 132*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 133*1003e004SJérôme Duval /* Formatter */ 134*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 135*1003e004SJérôme Duval 136*1003e004SJérôme Duval /** 137*1003e004SJérôme Duval * Returning this status code in some specified formatter callbacks will cause 138*1003e004SJérôme Duval * the formatter to omit the corresponding token. 139*1003e004SJérôme Duval * 140*1003e004SJérôme Duval * Valid callbacks: 141*1003e004SJérôme Duval * - `ZYDIS_FORMATTER_FUNC_PRE_OPERAND` 142*1003e004SJérôme Duval * - `ZYDIS_FORMATTER_FUNC_POST_OPERAND` 143*1003e004SJérôme Duval * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_REG` 144*1003e004SJérôme Duval * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_MEM` 145*1003e004SJérôme Duval * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_PTR` 146*1003e004SJérôme Duval * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_IMM` 147*1003e004SJérôme Duval */ 148*1003e004SJérôme Duval #define ZYDIS_STATUS_SKIP_TOKEN \ 149*1003e004SJérôme Duval ZYAN_MAKE_STATUS(0u, ZYAN_MODULE_ZYDIS, 0x0Bu) 150*1003e004SJérôme Duval 151*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 152*1003e004SJérôme Duval /* Encoder */ 153*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 154*1003e004SJérôme Duval 155*1003e004SJérôme Duval #define ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION \ 156*1003e004SJérôme Duval ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x0Cu) 157*1003e004SJérôme Duval 158*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */ 159*1003e004SJérôme Duval 160*1003e004SJérôme Duval /* ============================================================================================== */ 161*1003e004SJérôme Duval 162*1003e004SJérôme Duval 163*1003e004SJérôme Duval #ifdef __cplusplus 164*1003e004SJérôme Duval } 165*1003e004SJérôme Duval #endif 166*1003e004SJérôme Duval 167*1003e004SJérôme Duval #endif /* ZYDIS_STATUS_H */ 168