| #ifndef CAPSTONE_NEO_H |
| #define CAPSTONE_NEO_H |
| |
| /* Capstone Disassembly Engine */ |
| /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2018 */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "platform.h" |
| |
| #ifdef _MSC_VER |
| #pragma warning(disable:4201) |
| #endif |
| |
| typedef enum neo_fee { |
| NEO_FEE_0, // fee 0 |
| NEO_FEE_01, // fee 0.1 |
| NEO_FEE_001, // fee 0.01 |
| NEO_FEE_002, // fee 0.02 |
| NEO_FEE_0001, // fee 0.001 |
| } neo_fee; |
| |
| // Instruction structure |
| typedef struct cs_neo { |
| unsigned char op_size; // operand size |
| unsigned char pop; // number of items popped from the stack |
| unsigned char push; // number of items pushed into the stack |
| neo_fee fee; // gas fee for the instruction |
| } cs_neo; |
| |
| //> NEO instruction |
| typedef enum cs_neo_insn { |
| NEO_INS_PUSH0 = 0, |
| NEO_INS_PUSHBYTES1 = 1, |
| NEO_INS_PUSHBYTES2 = 2, |
| NEO_INS_PUSHBYTES3 = 3, |
| NEO_INS_PUSHBYTES4 = 4, |
| NEO_INS_PUSHBYTES5 = 5, |
| NEO_INS_PUSHBYTES6 = 6, |
| NEO_INS_PUSHBYTES7 = 7, |
| NEO_INS_PUSHBYTES8 = 8, |
| NEO_INS_PUSHBYTES9 = 9, |
| NEO_INS_PUSHBYTES10 = 10, |
| NEO_INS_PUSHBYTES11 = 11, |
| NEO_INS_PUSHBYTES12 = 12, |
| NEO_INS_PUSHBYTES13 = 13, |
| NEO_INS_PUSHBYTES14 = 14, |
| NEO_INS_PUSHBYTES15 = 15, |
| NEO_INS_PUSHBYTES16 = 16, |
| NEO_INS_PUSHBYTES17 = 17, |
| NEO_INS_PUSHBYTES18 = 18, |
| NEO_INS_PUSHBYTES19 = 19, |
| NEO_INS_PUSHBYTES20 = 20, |
| NEO_INS_PUSHBYTES21 = 21, |
| NEO_INS_PUSHBYTES22 = 22, |
| NEO_INS_PUSHBYTES23 = 23, |
| NEO_INS_PUSHBYTES24 = 24, |
| NEO_INS_PUSHBYTES25 = 25, |
| NEO_INS_PUSHBYTES26 = 26, |
| NEO_INS_PUSHBYTES27 = 27, |
| NEO_INS_PUSHBYTES28 = 28, |
| NEO_INS_PUSHBYTES29 = 29, |
| NEO_INS_PUSHBYTES30 = 30, |
| NEO_INS_PUSHBYTES31 = 31, |
| NEO_INS_PUSHBYTES32 = 32, |
| NEO_INS_PUSHBYTES33 = 33, |
| NEO_INS_PUSHBYTES34 = 34, |
| NEO_INS_PUSHBYTES35 = 35, |
| NEO_INS_PUSHBYTES36 = 36, |
| NEO_INS_PUSHBYTES37 = 37, |
| NEO_INS_PUSHBYTES38 = 38, |
| NEO_INS_PUSHBYTES39 = 39, |
| NEO_INS_PUSHBYTES40 = 40, |
| NEO_INS_PUSHBYTES41 = 41, |
| NEO_INS_PUSHBYTES42 = 42, |
| NEO_INS_PUSHBYTES43 = 43, |
| NEO_INS_PUSHBYTES44 = 44, |
| NEO_INS_PUSHBYTES45 = 45, |
| NEO_INS_PUSHBYTES46 = 46, |
| NEO_INS_PUSHBYTES47 = 47, |
| NEO_INS_PUSHBYTES48 = 48, |
| NEO_INS_PUSHBYTES49 = 49, |
| NEO_INS_PUSHBYTES50 = 50, |
| NEO_INS_PUSHBYTES51 = 51, |
| NEO_INS_PUSHBYTES52 = 52, |
| NEO_INS_PUSHBYTES53 = 53, |
| NEO_INS_PUSHBYTES54 = 54, |
| NEO_INS_PUSHBYTES55 = 55, |
| NEO_INS_PUSHBYTES56 = 56, |
| NEO_INS_PUSHBYTES57 = 57, |
| NEO_INS_PUSHBYTES58 = 58, |
| NEO_INS_PUSHBYTES59 = 59, |
| NEO_INS_PUSHBYTES60 = 60, |
| NEO_INS_PUSHBYTES61 = 61, |
| NEO_INS_PUSHBYTES62 = 62, |
| NEO_INS_PUSHBYTES63 = 63, |
| NEO_INS_PUSHBYTES64 = 64, |
| NEO_INS_PUSHBYTES65 = 65, |
| NEO_INS_PUSHBYTES66 = 66, |
| NEO_INS_PUSHBYTES67 = 67, |
| NEO_INS_PUSHBYTES68 = 68, |
| NEO_INS_PUSHBYTES69 = 69, |
| NEO_INS_PUSHBYTES70 = 70, |
| NEO_INS_PUSHBYTES71 = 71, |
| NEO_INS_PUSHBYTES72 = 72, |
| NEO_INS_PUSHBYTES73 = 73, |
| NEO_INS_PUSHBYTES74 = 74, |
| NEO_INS_PUSHBYTES75 = 75, |
| NEO_INS_PUSHDATA1 = 76, |
| NEO_INS_PUSHDATA2 = 77, |
| NEO_INS_PUSHDATA4 = 78, |
| NEO_INS_PUSHM1 = 79, |
| NEO_INS_PUSH1 = 81, |
| NEO_INS_PUSH2 = 82, |
| NEO_INS_PUSH3 = 83, |
| NEO_INS_PUSH4 = 84, |
| NEO_INS_PUSH5 = 85, |
| NEO_INS_PUSH6 = 86, |
| NEO_INS_PUSH7 = 87, |
| NEO_INS_PUSH8 = 88, |
| NEO_INS_PUSH9 = 89, |
| NEO_INS_PUSH10 = 90, |
| NEO_INS_PUSH11 = 91, |
| NEO_INS_PUSH12 = 92, |
| NEO_INS_PUSH13 = 93, |
| NEO_INS_PUSH14 = 94, |
| NEO_INS_PUSH15 = 95, |
| NEO_INS_PUSH16 = 96, |
| NEO_INS_NOP = 97, |
| NEO_INS_JMP = 98, |
| NEO_INS_JMPIF = 99, |
| NEO_INS_JMPIFNOT = 100, |
| NEO_INS_CALL = 101, |
| NEO_INS_RET = 102, |
| NEO_INS_APPCALL = 103, |
| NEO_INS_SYSCALL = 104, |
| NEO_INS_TAILCALL = 105, |
| NEO_INS_DUPFROMALTSTACK = 106, |
| NEO_INS_TOALTSTACK = 107, |
| NEO_INS_FROMALTSTACK = 108, |
| NEO_INS_XDROP = 109, |
| NEO_INS_XSWAP = 114, |
| NEO_INS_XTUCK = 115, |
| NEO_INS_DEPTH = 116, |
| NEO_INS_DROP = 117, |
| NEO_INS_DUP = 118, |
| NEO_INS_NIP = 119, |
| NEO_INS_OVER = 120, |
| NEO_INS_PICK = 121, |
| NEO_INS_ROLL = 122, |
| NEO_INS_ROT = 123, |
| NEO_INS_SWAP = 124, |
| NEO_INS_TUCK = 125, |
| NEO_INS_CAT = 126, |
| NEO_INS_SUBSTR = 127, |
| NEO_INS_LEFT = 128, |
| NEO_INS_RIGHT = 129, |
| NEO_INS_SIZE = 130, |
| NEO_INS_INVERT = 131, |
| NEO_INS_AND = 132, |
| NEO_INS_OR = 133, |
| NEO_INS_XOR = 134, |
| NEO_INS_EQUAL = 135, |
| NEO_INS_OP_EQUALVERIFY = 136, |
| NEO_INS_OP_RESERVED1 = 137, |
| NEO_INS_OP_RESERVED2 = 138, |
| NEO_INS_INC = 139, |
| NEO_INS_DEC = 140, |
| NEO_INS_SIGN = 141, |
| NEO_INS_NEGATE = 143, |
| NEO_INS_ABS = 144, |
| NEO_INS_NOT = 145, |
| NEO_INS_NZ = 146, |
| NEO_INS_ADD = 147, |
| NEO_INS_SUB = 148, |
| NEO_INS_MUL = 149, |
| NEO_INS_DIV = 150, |
| NEO_INS_MOD = 151, |
| NEO_INS_SHL = 152, |
| NEO_INS_SHR = 153, |
| NEO_INS_BOOLAND = 154, |
| NEO_INS_BOOLOR = 155, |
| NEO_INS_NUMEQUAL = 156, |
| NEO_INS_NUMNOTEQUAL = 158, |
| NEO_INS_LT = 159, |
| NEO_INS_GT = 160, |
| NEO_INS_LTE = 161, |
| NEO_INS_GTE = 162, |
| NEO_INS_MIN = 163, |
| NEO_INS_MAX = 164, |
| NEO_INS_WITHIN = 165, |
| NEO_INS_SHA1 = 167, |
| NEO_INS_SHA256 = 168, |
| NEO_INS_HASH160 = 169, |
| NEO_INS_HASH256 = 170, |
| NEO_INS_CHECKSIG = 172, |
| NEO_INS_VERIFY = 173, |
| NEO_INS_CHECKMULTISIG = 174, |
| NEO_INS_ARRAYSIZE = 192, |
| NEO_INS_PACK = 193, |
| NEO_INS_UNPACK = 194, |
| NEO_INS_PICKITEM = 195, |
| NEO_INS_SETITEM = 196, |
| NEO_INS_NEWARRAY = 197, |
| NEO_INS_NEWSTRUCT = 198, |
| NEO_INS_NEWMAP = 199, |
| NEO_INS_APPEND = 200, |
| NEO_INS_REVERSE = 201, |
| NEO_INS_REMOVE = 202, |
| NEO_INS_HASKEY = 203, |
| NEO_INS_KEYS = 204, |
| NEO_INS_VALUES = 205, |
| NEO_INS_THROW = 240, |
| NEO_INS_THROWIFNOT = 241, |
| |
| NEO_INS_INVALID = 512, |
| NEO_INS_ENDING, // <-- mark the end of the list of instructions |
| } cs_neo_insn; |
| |
| //> Group of NEO instructions |
| typedef enum cs_neo_insn_group { |
| NEO_GRP_INVALID = 0, // = CS_GRP_INVALID |
| |
| NEO_GRP_JUMP, // all jump instructions |
| |
| NEO_GRP_MATH = 8, // math instructions |
| NEO_GRP_STACK_WRITE, |
| NEO_GRP_STACK_READ, |
| |
| NEO_GRP_ENDING, // <-- mark the end of the list of groups |
| } cs_neo_insn_group; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |