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 /** 28 * @file 29 * Status code definitions and check macros. 30 */ 31 32 #ifndef ZYDIS_STATUS_H 33 #define ZYDIS_STATUS_H 34 35 #include <Zycore/Status.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 /* ============================================================================================== */ 42 /* Status codes */ 43 /* ============================================================================================== */ 44 45 /* ---------------------------------------------------------------------------------------------- */ 46 /* Module IDs */ 47 /* ---------------------------------------------------------------------------------------------- */ 48 49 /** 50 * The zydis module id. 51 */ 52 #define ZYAN_MODULE_ZYDIS 0x002u 53 54 /* ---------------------------------------------------------------------------------------------- */ 55 /* Status codes */ 56 /* ---------------------------------------------------------------------------------------------- */ 57 58 /* ---------------------------------------------------------------------------------------------- */ 59 /* Decoder */ 60 /* ---------------------------------------------------------------------------------------------- */ 61 62 /** 63 * An attempt was made to read data from an input data-source that has no more 64 * data available. 65 */ 66 #define ZYDIS_STATUS_NO_MORE_DATA \ 67 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x00u) 68 69 /** 70 * An general error occured while decoding the current instruction. The 71 * instruction might be undefined. 72 */ 73 #define ZYDIS_STATUS_DECODING_ERROR \ 74 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x01u) 75 76 /** 77 * The instruction exceeded the maximum length of 15 bytes. 78 */ 79 #define ZYDIS_STATUS_INSTRUCTION_TOO_LONG \ 80 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x02u) 81 82 /** 83 * The instruction encoded an invalid register. 84 */ 85 #define ZYDIS_STATUS_BAD_REGISTER \ 86 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x03u) 87 88 /** 89 * A lock-prefix (F0) was found while decoding an instruction that does not 90 * support locking. 91 */ 92 #define ZYDIS_STATUS_ILLEGAL_LOCK \ 93 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x04u) 94 95 /** 96 * A legacy-prefix (F2, F3, 66) was found while decoding a XOP/VEX/EVEX/MVEX 97 * instruction. 98 */ 99 #define ZYDIS_STATUS_ILLEGAL_LEGACY_PFX \ 100 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x05u) 101 102 /** 103 * A rex-prefix was found while decoding a XOP/VEX/EVEX/MVEX instruction. 104 */ 105 #define ZYDIS_STATUS_ILLEGAL_REX \ 106 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x06u) 107 108 /** 109 * An invalid opcode-map value was found while decoding a XOP/VEX/EVEX/MVEX-prefix. 110 */ 111 #define ZYDIS_STATUS_INVALID_MAP \ 112 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x07u) 113 114 /** 115 * An error occured while decoding the EVEX-prefix. 116 */ 117 #define ZYDIS_STATUS_MALFORMED_EVEX \ 118 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x08u) 119 120 /** 121 * An error occured while decoding the MVEX-prefix. 122 */ 123 #define ZYDIS_STATUS_MALFORMED_MVEX \ 124 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x09u) 125 126 /** 127 * An invalid write-mask was specified for an EVEX/MVEX instruction. 128 */ 129 #define ZYDIS_STATUS_INVALID_MASK \ 130 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x0Au) 131 132 /* ---------------------------------------------------------------------------------------------- */ 133 /* Formatter */ 134 /* ---------------------------------------------------------------------------------------------- */ 135 136 /** 137 * Returning this status code in some specified formatter callbacks will cause 138 * the formatter to omit the corresponding token. 139 * 140 * Valid callbacks: 141 * - `ZYDIS_FORMATTER_FUNC_PRE_OPERAND` 142 * - `ZYDIS_FORMATTER_FUNC_POST_OPERAND` 143 * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_REG` 144 * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_MEM` 145 * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_PTR` 146 * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_IMM` 147 */ 148 #define ZYDIS_STATUS_SKIP_TOKEN \ 149 ZYAN_MAKE_STATUS(0u, ZYAN_MODULE_ZYDIS, 0x0Bu) 150 151 /* ---------------------------------------------------------------------------------------------- */ 152 /* Encoder */ 153 /* ---------------------------------------------------------------------------------------------- */ 154 155 #define ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION \ 156 ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x0Cu) 157 158 /* ---------------------------------------------------------------------------------------------- */ 159 160 /* ============================================================================================== */ 161 162 163 #ifdef __cplusplus 164 } 165 #endif 166 167 #endif /* ZYDIS_STATUS_H */ 168