blob: 95843e5e823ff357344487dc17457513a535033c [file] [log] [blame]
#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