diff --git a/bindings/const_generator.py b/bindings/const_generator.py index e10601d2..7adafe33 100644 --- a/bindings/const_generator.py +++ b/bindings/const_generator.py @@ -57,10 +57,10 @@ template = { 'comment_close': '', }, 'dotnet': { - 'header': "// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT\n\nnamespace UnicornEngine.Const\n\nopen System\n\n[]\nmodule %s =\n", + 'header': "// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT\n\nnamespace UnicornManaged.Const\n\nopen System\n\n[]\nmodule %s =\n", 'footer': "\n", - 'line_format': ' let UC_%s = %s\n', - 'out_file': os.path.join('dotnet', 'Unicorn', 'Const', '%s.fs'), + 'line_format': ' let UC_%s = %s\n', + 'out_file': os.path.join('dotnet', 'UnicornManaged', 'Const', '%s.fs'), # prefixes for constant filenames of all archs - case sensitive 'arm.h': 'Arm', 'arm64.h': 'Arm64', @@ -69,7 +69,7 @@ template = { 'sparc.h': 'Sparc', 'm68k.h': 'M68k', 'unicorn.h': 'Common', - 'comment_open': '//', + 'comment_open': ' //', 'comment_close': '', }, } diff --git a/bindings/dotnet/Unicorn/Const/Arm.fs b/bindings/dotnet/Unicorn/Const/Arm.fs deleted file mode 100644 index 390078a7..00000000 --- a/bindings/dotnet/Unicorn/Const/Arm.fs +++ /dev/null @@ -1,133 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module Arm = - -// ARM registers - - let UC_ARM_REG_INVALID = 0 - let UC_ARM_REG_APSR = 1 - let UC_ARM_REG_APSR_NZCV = 2 - let UC_ARM_REG_CPSR = 3 - let UC_ARM_REG_FPEXC = 4 - let UC_ARM_REG_FPINST = 5 - let UC_ARM_REG_FPSCR = 6 - let UC_ARM_REG_FPSCR_NZCV = 7 - let UC_ARM_REG_FPSID = 8 - let UC_ARM_REG_ITSTATE = 9 - let UC_ARM_REG_LR = 10 - let UC_ARM_REG_PC = 11 - let UC_ARM_REG_SP = 12 - let UC_ARM_REG_SPSR = 13 - let UC_ARM_REG_D0 = 14 - let UC_ARM_REG_D1 = 15 - let UC_ARM_REG_D2 = 16 - let UC_ARM_REG_D3 = 17 - let UC_ARM_REG_D4 = 18 - let UC_ARM_REG_D5 = 19 - let UC_ARM_REG_D6 = 20 - let UC_ARM_REG_D7 = 21 - let UC_ARM_REG_D8 = 22 - let UC_ARM_REG_D9 = 23 - let UC_ARM_REG_D10 = 24 - let UC_ARM_REG_D11 = 25 - let UC_ARM_REG_D12 = 26 - let UC_ARM_REG_D13 = 27 - let UC_ARM_REG_D14 = 28 - let UC_ARM_REG_D15 = 29 - let UC_ARM_REG_D16 = 30 - let UC_ARM_REG_D17 = 31 - let UC_ARM_REG_D18 = 32 - let UC_ARM_REG_D19 = 33 - let UC_ARM_REG_D20 = 34 - let UC_ARM_REG_D21 = 35 - let UC_ARM_REG_D22 = 36 - let UC_ARM_REG_D23 = 37 - let UC_ARM_REG_D24 = 38 - let UC_ARM_REG_D25 = 39 - let UC_ARM_REG_D26 = 40 - let UC_ARM_REG_D27 = 41 - let UC_ARM_REG_D28 = 42 - let UC_ARM_REG_D29 = 43 - let UC_ARM_REG_D30 = 44 - let UC_ARM_REG_D31 = 45 - let UC_ARM_REG_FPINST2 = 46 - let UC_ARM_REG_MVFR0 = 47 - let UC_ARM_REG_MVFR1 = 48 - let UC_ARM_REG_MVFR2 = 49 - let UC_ARM_REG_Q0 = 50 - let UC_ARM_REG_Q1 = 51 - let UC_ARM_REG_Q2 = 52 - let UC_ARM_REG_Q3 = 53 - let UC_ARM_REG_Q4 = 54 - let UC_ARM_REG_Q5 = 55 - let UC_ARM_REG_Q6 = 56 - let UC_ARM_REG_Q7 = 57 - let UC_ARM_REG_Q8 = 58 - let UC_ARM_REG_Q9 = 59 - let UC_ARM_REG_Q10 = 60 - let UC_ARM_REG_Q11 = 61 - let UC_ARM_REG_Q12 = 62 - let UC_ARM_REG_Q13 = 63 - let UC_ARM_REG_Q14 = 64 - let UC_ARM_REG_Q15 = 65 - let UC_ARM_REG_R0 = 66 - let UC_ARM_REG_R1 = 67 - let UC_ARM_REG_R2 = 68 - let UC_ARM_REG_R3 = 69 - let UC_ARM_REG_R4 = 70 - let UC_ARM_REG_R5 = 71 - let UC_ARM_REG_R6 = 72 - let UC_ARM_REG_R7 = 73 - let UC_ARM_REG_R8 = 74 - let UC_ARM_REG_R9 = 75 - let UC_ARM_REG_R10 = 76 - let UC_ARM_REG_R11 = 77 - let UC_ARM_REG_R12 = 78 - let UC_ARM_REG_S0 = 79 - let UC_ARM_REG_S1 = 80 - let UC_ARM_REG_S2 = 81 - let UC_ARM_REG_S3 = 82 - let UC_ARM_REG_S4 = 83 - let UC_ARM_REG_S5 = 84 - let UC_ARM_REG_S6 = 85 - let UC_ARM_REG_S7 = 86 - let UC_ARM_REG_S8 = 87 - let UC_ARM_REG_S9 = 88 - let UC_ARM_REG_S10 = 89 - let UC_ARM_REG_S11 = 90 - let UC_ARM_REG_S12 = 91 - let UC_ARM_REG_S13 = 92 - let UC_ARM_REG_S14 = 93 - let UC_ARM_REG_S15 = 94 - let UC_ARM_REG_S16 = 95 - let UC_ARM_REG_S17 = 96 - let UC_ARM_REG_S18 = 97 - let UC_ARM_REG_S19 = 98 - let UC_ARM_REG_S20 = 99 - let UC_ARM_REG_S21 = 100 - let UC_ARM_REG_S22 = 101 - let UC_ARM_REG_S23 = 102 - let UC_ARM_REG_S24 = 103 - let UC_ARM_REG_S25 = 104 - let UC_ARM_REG_S26 = 105 - let UC_ARM_REG_S27 = 106 - let UC_ARM_REG_S28 = 107 - let UC_ARM_REG_S29 = 108 - let UC_ARM_REG_S30 = 109 - let UC_ARM_REG_S31 = 110 - let UC_ARM_REG_ENDING = 111 - -// alias registers - let UC_ARM_REG_R13 = 12 - let UC_ARM_REG_R14 = 10 - let UC_ARM_REG_R15 = 11 - let UC_ARM_REG_SB = 75 - let UC_ARM_REG_SL = 76 - let UC_ARM_REG_FP = 77 - let UC_ARM_REG_IP = 78 - diff --git a/bindings/dotnet/Unicorn/Const/Arm64.fs b/bindings/dotnet/Unicorn/Const/Arm64.fs deleted file mode 100644 index df757f70..00000000 --- a/bindings/dotnet/Unicorn/Const/Arm64.fs +++ /dev/null @@ -1,282 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module Arm64 = - -// ARM64 registers - - let UC_ARM64_REG_INVALID = 0 - let UC_ARM64_REG_X29 = 1 - let UC_ARM64_REG_X30 = 2 - let UC_ARM64_REG_NZCV = 3 - let UC_ARM64_REG_SP = 4 - let UC_ARM64_REG_WSP = 5 - let UC_ARM64_REG_WZR = 6 - let UC_ARM64_REG_XZR = 7 - let UC_ARM64_REG_B0 = 8 - let UC_ARM64_REG_B1 = 9 - let UC_ARM64_REG_B2 = 10 - let UC_ARM64_REG_B3 = 11 - let UC_ARM64_REG_B4 = 12 - let UC_ARM64_REG_B5 = 13 - let UC_ARM64_REG_B6 = 14 - let UC_ARM64_REG_B7 = 15 - let UC_ARM64_REG_B8 = 16 - let UC_ARM64_REG_B9 = 17 - let UC_ARM64_REG_B10 = 18 - let UC_ARM64_REG_B11 = 19 - let UC_ARM64_REG_B12 = 20 - let UC_ARM64_REG_B13 = 21 - let UC_ARM64_REG_B14 = 22 - let UC_ARM64_REG_B15 = 23 - let UC_ARM64_REG_B16 = 24 - let UC_ARM64_REG_B17 = 25 - let UC_ARM64_REG_B18 = 26 - let UC_ARM64_REG_B19 = 27 - let UC_ARM64_REG_B20 = 28 - let UC_ARM64_REG_B21 = 29 - let UC_ARM64_REG_B22 = 30 - let UC_ARM64_REG_B23 = 31 - let UC_ARM64_REG_B24 = 32 - let UC_ARM64_REG_B25 = 33 - let UC_ARM64_REG_B26 = 34 - let UC_ARM64_REG_B27 = 35 - let UC_ARM64_REG_B28 = 36 - let UC_ARM64_REG_B29 = 37 - let UC_ARM64_REG_B30 = 38 - let UC_ARM64_REG_B31 = 39 - let UC_ARM64_REG_D0 = 40 - let UC_ARM64_REG_D1 = 41 - let UC_ARM64_REG_D2 = 42 - let UC_ARM64_REG_D3 = 43 - let UC_ARM64_REG_D4 = 44 - let UC_ARM64_REG_D5 = 45 - let UC_ARM64_REG_D6 = 46 - let UC_ARM64_REG_D7 = 47 - let UC_ARM64_REG_D8 = 48 - let UC_ARM64_REG_D9 = 49 - let UC_ARM64_REG_D10 = 50 - let UC_ARM64_REG_D11 = 51 - let UC_ARM64_REG_D12 = 52 - let UC_ARM64_REG_D13 = 53 - let UC_ARM64_REG_D14 = 54 - let UC_ARM64_REG_D15 = 55 - let UC_ARM64_REG_D16 = 56 - let UC_ARM64_REG_D17 = 57 - let UC_ARM64_REG_D18 = 58 - let UC_ARM64_REG_D19 = 59 - let UC_ARM64_REG_D20 = 60 - let UC_ARM64_REG_D21 = 61 - let UC_ARM64_REG_D22 = 62 - let UC_ARM64_REG_D23 = 63 - let UC_ARM64_REG_D24 = 64 - let UC_ARM64_REG_D25 = 65 - let UC_ARM64_REG_D26 = 66 - let UC_ARM64_REG_D27 = 67 - let UC_ARM64_REG_D28 = 68 - let UC_ARM64_REG_D29 = 69 - let UC_ARM64_REG_D30 = 70 - let UC_ARM64_REG_D31 = 71 - let UC_ARM64_REG_H0 = 72 - let UC_ARM64_REG_H1 = 73 - let UC_ARM64_REG_H2 = 74 - let UC_ARM64_REG_H3 = 75 - let UC_ARM64_REG_H4 = 76 - let UC_ARM64_REG_H5 = 77 - let UC_ARM64_REG_H6 = 78 - let UC_ARM64_REG_H7 = 79 - let UC_ARM64_REG_H8 = 80 - let UC_ARM64_REG_H9 = 81 - let UC_ARM64_REG_H10 = 82 - let UC_ARM64_REG_H11 = 83 - let UC_ARM64_REG_H12 = 84 - let UC_ARM64_REG_H13 = 85 - let UC_ARM64_REG_H14 = 86 - let UC_ARM64_REG_H15 = 87 - let UC_ARM64_REG_H16 = 88 - let UC_ARM64_REG_H17 = 89 - let UC_ARM64_REG_H18 = 90 - let UC_ARM64_REG_H19 = 91 - let UC_ARM64_REG_H20 = 92 - let UC_ARM64_REG_H21 = 93 - let UC_ARM64_REG_H22 = 94 - let UC_ARM64_REG_H23 = 95 - let UC_ARM64_REG_H24 = 96 - let UC_ARM64_REG_H25 = 97 - let UC_ARM64_REG_H26 = 98 - let UC_ARM64_REG_H27 = 99 - let UC_ARM64_REG_H28 = 100 - let UC_ARM64_REG_H29 = 101 - let UC_ARM64_REG_H30 = 102 - let UC_ARM64_REG_H31 = 103 - let UC_ARM64_REG_Q0 = 104 - let UC_ARM64_REG_Q1 = 105 - let UC_ARM64_REG_Q2 = 106 - let UC_ARM64_REG_Q3 = 107 - let UC_ARM64_REG_Q4 = 108 - let UC_ARM64_REG_Q5 = 109 - let UC_ARM64_REG_Q6 = 110 - let UC_ARM64_REG_Q7 = 111 - let UC_ARM64_REG_Q8 = 112 - let UC_ARM64_REG_Q9 = 113 - let UC_ARM64_REG_Q10 = 114 - let UC_ARM64_REG_Q11 = 115 - let UC_ARM64_REG_Q12 = 116 - let UC_ARM64_REG_Q13 = 117 - let UC_ARM64_REG_Q14 = 118 - let UC_ARM64_REG_Q15 = 119 - let UC_ARM64_REG_Q16 = 120 - let UC_ARM64_REG_Q17 = 121 - let UC_ARM64_REG_Q18 = 122 - let UC_ARM64_REG_Q19 = 123 - let UC_ARM64_REG_Q20 = 124 - let UC_ARM64_REG_Q21 = 125 - let UC_ARM64_REG_Q22 = 126 - let UC_ARM64_REG_Q23 = 127 - let UC_ARM64_REG_Q24 = 128 - let UC_ARM64_REG_Q25 = 129 - let UC_ARM64_REG_Q26 = 130 - let UC_ARM64_REG_Q27 = 131 - let UC_ARM64_REG_Q28 = 132 - let UC_ARM64_REG_Q29 = 133 - let UC_ARM64_REG_Q30 = 134 - let UC_ARM64_REG_Q31 = 135 - let UC_ARM64_REG_S0 = 136 - let UC_ARM64_REG_S1 = 137 - let UC_ARM64_REG_S2 = 138 - let UC_ARM64_REG_S3 = 139 - let UC_ARM64_REG_S4 = 140 - let UC_ARM64_REG_S5 = 141 - let UC_ARM64_REG_S6 = 142 - let UC_ARM64_REG_S7 = 143 - let UC_ARM64_REG_S8 = 144 - let UC_ARM64_REG_S9 = 145 - let UC_ARM64_REG_S10 = 146 - let UC_ARM64_REG_S11 = 147 - let UC_ARM64_REG_S12 = 148 - let UC_ARM64_REG_S13 = 149 - let UC_ARM64_REG_S14 = 150 - let UC_ARM64_REG_S15 = 151 - let UC_ARM64_REG_S16 = 152 - let UC_ARM64_REG_S17 = 153 - let UC_ARM64_REG_S18 = 154 - let UC_ARM64_REG_S19 = 155 - let UC_ARM64_REG_S20 = 156 - let UC_ARM64_REG_S21 = 157 - let UC_ARM64_REG_S22 = 158 - let UC_ARM64_REG_S23 = 159 - let UC_ARM64_REG_S24 = 160 - let UC_ARM64_REG_S25 = 161 - let UC_ARM64_REG_S26 = 162 - let UC_ARM64_REG_S27 = 163 - let UC_ARM64_REG_S28 = 164 - let UC_ARM64_REG_S29 = 165 - let UC_ARM64_REG_S30 = 166 - let UC_ARM64_REG_S31 = 167 - let UC_ARM64_REG_W0 = 168 - let UC_ARM64_REG_W1 = 169 - let UC_ARM64_REG_W2 = 170 - let UC_ARM64_REG_W3 = 171 - let UC_ARM64_REG_W4 = 172 - let UC_ARM64_REG_W5 = 173 - let UC_ARM64_REG_W6 = 174 - let UC_ARM64_REG_W7 = 175 - let UC_ARM64_REG_W8 = 176 - let UC_ARM64_REG_W9 = 177 - let UC_ARM64_REG_W10 = 178 - let UC_ARM64_REG_W11 = 179 - let UC_ARM64_REG_W12 = 180 - let UC_ARM64_REG_W13 = 181 - let UC_ARM64_REG_W14 = 182 - let UC_ARM64_REG_W15 = 183 - let UC_ARM64_REG_W16 = 184 - let UC_ARM64_REG_W17 = 185 - let UC_ARM64_REG_W18 = 186 - let UC_ARM64_REG_W19 = 187 - let UC_ARM64_REG_W20 = 188 - let UC_ARM64_REG_W21 = 189 - let UC_ARM64_REG_W22 = 190 - let UC_ARM64_REG_W23 = 191 - let UC_ARM64_REG_W24 = 192 - let UC_ARM64_REG_W25 = 193 - let UC_ARM64_REG_W26 = 194 - let UC_ARM64_REG_W27 = 195 - let UC_ARM64_REG_W28 = 196 - let UC_ARM64_REG_W29 = 197 - let UC_ARM64_REG_W30 = 198 - let UC_ARM64_REG_X0 = 199 - let UC_ARM64_REG_X1 = 200 - let UC_ARM64_REG_X2 = 201 - let UC_ARM64_REG_X3 = 202 - let UC_ARM64_REG_X4 = 203 - let UC_ARM64_REG_X5 = 204 - let UC_ARM64_REG_X6 = 205 - let UC_ARM64_REG_X7 = 206 - let UC_ARM64_REG_X8 = 207 - let UC_ARM64_REG_X9 = 208 - let UC_ARM64_REG_X10 = 209 - let UC_ARM64_REG_X11 = 210 - let UC_ARM64_REG_X12 = 211 - let UC_ARM64_REG_X13 = 212 - let UC_ARM64_REG_X14 = 213 - let UC_ARM64_REG_X15 = 214 - let UC_ARM64_REG_X16 = 215 - let UC_ARM64_REG_X17 = 216 - let UC_ARM64_REG_X18 = 217 - let UC_ARM64_REG_X19 = 218 - let UC_ARM64_REG_X20 = 219 - let UC_ARM64_REG_X21 = 220 - let UC_ARM64_REG_X22 = 221 - let UC_ARM64_REG_X23 = 222 - let UC_ARM64_REG_X24 = 223 - let UC_ARM64_REG_X25 = 224 - let UC_ARM64_REG_X26 = 225 - let UC_ARM64_REG_X27 = 226 - let UC_ARM64_REG_X28 = 227 - let UC_ARM64_REG_V0 = 228 - let UC_ARM64_REG_V1 = 229 - let UC_ARM64_REG_V2 = 230 - let UC_ARM64_REG_V3 = 231 - let UC_ARM64_REG_V4 = 232 - let UC_ARM64_REG_V5 = 233 - let UC_ARM64_REG_V6 = 234 - let UC_ARM64_REG_V7 = 235 - let UC_ARM64_REG_V8 = 236 - let UC_ARM64_REG_V9 = 237 - let UC_ARM64_REG_V10 = 238 - let UC_ARM64_REG_V11 = 239 - let UC_ARM64_REG_V12 = 240 - let UC_ARM64_REG_V13 = 241 - let UC_ARM64_REG_V14 = 242 - let UC_ARM64_REG_V15 = 243 - let UC_ARM64_REG_V16 = 244 - let UC_ARM64_REG_V17 = 245 - let UC_ARM64_REG_V18 = 246 - let UC_ARM64_REG_V19 = 247 - let UC_ARM64_REG_V20 = 248 - let UC_ARM64_REG_V21 = 249 - let UC_ARM64_REG_V22 = 250 - let UC_ARM64_REG_V23 = 251 - let UC_ARM64_REG_V24 = 252 - let UC_ARM64_REG_V25 = 253 - let UC_ARM64_REG_V26 = 254 - let UC_ARM64_REG_V27 = 255 - let UC_ARM64_REG_V28 = 256 - let UC_ARM64_REG_V29 = 257 - let UC_ARM64_REG_V30 = 258 - let UC_ARM64_REG_V31 = 259 - -// pseudo registers - let UC_ARM64_REG_PC = 260 - let UC_ARM64_REG_ENDING = 261 - -// alias registers - let UC_ARM64_REG_IP1 = 215 - let UC_ARM64_REG_IP0 = 216 - let UC_ARM64_REG_FP = 1 - let UC_ARM64_REG_LR = 2 - diff --git a/bindings/dotnet/Unicorn/Const/Common.fs b/bindings/dotnet/Unicorn/Const/Common.fs deleted file mode 100644 index c3c4655e..00000000 --- a/bindings/dotnet/Unicorn/Const/Common.fs +++ /dev/null @@ -1,96 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module Common = - - let UC_API_MAJOR = 0 - let UC_API_MINOR = 9 - let UC_SECOND_SCALE = 1000000 - let UC_MILISECOND_SCALE = 1000 - let UC_ARCH_ARM = 1 - let UC_ARCH_ARM64 = 2 - let UC_ARCH_MIPS = 3 - let UC_ARCH_X86 = 4 - let UC_ARCH_PPC = 5 - let UC_ARCH_SPARC = 6 - let UC_ARCH_M68K = 7 - let UC_ARCH_MAX = 8 - - let UC_MODE_LITTLE_ENDIAN = 0 - - let UC_MODE_ARM = 0 - let UC_MODE_16 = 2 - let UC_MODE_32 = 4 - let UC_MODE_64 = 8 - let UC_MODE_THUMB = 16 - let UC_MODE_MCLASS = 32 - let UC_MODE_V8 = 64 - let UC_MODE_MICRO = 16 - let UC_MODE_MIPS3 = 32 - let UC_MODE_MIPS32R6 = 64 - let UC_MODE_V9 = 16 - let UC_MODE_QPX = 16 - let UC_MODE_BIG_ENDIAN = 1073741824 - let UC_MODE_MIPS32 = 4 - let UC_MODE_MIPS64 = 8 - - let UC_ERR_OK = 0 - let UC_ERR_NOMEM = 1 - let UC_ERR_ARCH = 2 - let UC_ERR_HANDLE = 3 - let UC_ERR_MODE = 4 - let UC_ERR_VERSION = 5 - let UC_ERR_READ_UNMAPPED = 6 - let UC_ERR_WRITE_UNMAPPED = 7 - let UC_ERR_FETCH_UNMAPPED = 8 - let UC_ERR_HOOK = 9 - let UC_ERR_INSN_INVALID = 10 - let UC_ERR_MAP = 11 - let UC_ERR_WRITE_PROT = 12 - let UC_ERR_READ_PROT = 13 - let UC_ERR_FETCH_PROT = 14 - let UC_ERR_ARG = 15 - let UC_ERR_READ_UNALIGNED = 16 - let UC_ERR_WRITE_UNALIGNED = 17 - let UC_ERR_FETCH_UNALIGNED = 18 - let UC_ERR_HOOK_EXIST = 19 - let UC_ERR_RESOURCE = 20 - let UC_MEM_READ = 16 - let UC_MEM_WRITE = 17 - let UC_MEM_FETCH = 18 - let UC_MEM_READ_UNMAPPED = 19 - let UC_MEM_WRITE_UNMAPPED = 20 - let UC_MEM_FETCH_UNMAPPED = 21 - let UC_MEM_WRITE_PROT = 22 - let UC_MEM_READ_PROT = 23 - let UC_MEM_FETCH_PROT = 24 - let UC_HOOK_INTR = 1 - let UC_HOOK_INSN = 2 - let UC_HOOK_CODE = 4 - let UC_HOOK_BLOCK = 8 - let UC_HOOK_MEM_READ_UNMAPPED = 16 - let UC_HOOK_MEM_WRITE_UNMAPPED = 32 - let UC_HOOK_MEM_FETCH_UNMAPPED = 64 - let UC_HOOK_MEM_READ_PROT = 128 - let UC_HOOK_MEM_WRITE_PROT = 256 - let UC_HOOK_MEM_FETCH_PROT = 512 - let UC_HOOK_MEM_READ = 1024 - let UC_HOOK_MEM_WRITE = 2048 - let UC_HOOK_MEM_FETCH = 4096 - let UC_HOOK_MEM_UNMAPPED = 112 - let UC_HOOK_MEM_PROT = 896 - let UC_HOOK_MEM_READ_INVALID = 144 - let UC_HOOK_MEM_WRITE_INVALID = 288 - let UC_HOOK_MEM_FETCH_INVALID = 576 - let UC_HOOK_MEM_INVALID = 1008 - - let UC_PROT_NONE = 0 - let UC_PROT_READ = 1 - let UC_PROT_WRITE = 2 - let UC_PROT_EXEC = 4 - let UC_PROT_ALL = 7 - diff --git a/bindings/dotnet/Unicorn/Const/M68k.fs b/bindings/dotnet/Unicorn/Const/M68k.fs deleted file mode 100644 index 9715f0af..00000000 --- a/bindings/dotnet/Unicorn/Const/M68k.fs +++ /dev/null @@ -1,32 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module M68k = - -// M68K registers - - let UC_M68K_REG_INVALID = 0 - let UC_M68K_REG_A0 = 1 - let UC_M68K_REG_A1 = 2 - let UC_M68K_REG_A2 = 3 - let UC_M68K_REG_A3 = 4 - let UC_M68K_REG_A4 = 5 - let UC_M68K_REG_A5 = 6 - let UC_M68K_REG_A6 = 7 - let UC_M68K_REG_A7 = 8 - let UC_M68K_REG_D0 = 9 - let UC_M68K_REG_D1 = 10 - let UC_M68K_REG_D2 = 11 - let UC_M68K_REG_D3 = 12 - let UC_M68K_REG_D4 = 13 - let UC_M68K_REG_D5 = 14 - let UC_M68K_REG_D6 = 15 - let UC_M68K_REG_D7 = 16 - let UC_M68K_REG_SR = 17 - let UC_M68K_REG_PC = 18 - let UC_M68K_REG_ENDING = 19 - diff --git a/bindings/dotnet/Unicorn/Const/Mips.fs b/bindings/dotnet/Unicorn/Const/Mips.fs deleted file mode 100644 index 04e3e3fc..00000000 --- a/bindings/dotnet/Unicorn/Const/Mips.fs +++ /dev/null @@ -1,203 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module Mips = - -// MIPS registers - - let UC_MIPS_REG_INVALID = 0 - -// General purpose registers - let UC_MIPS_REG_PC = 1 - let UC_MIPS_REG_0 = 2 - let UC_MIPS_REG_1 = 3 - let UC_MIPS_REG_2 = 4 - let UC_MIPS_REG_3 = 5 - let UC_MIPS_REG_4 = 6 - let UC_MIPS_REG_5 = 7 - let UC_MIPS_REG_6 = 8 - let UC_MIPS_REG_7 = 9 - let UC_MIPS_REG_8 = 10 - let UC_MIPS_REG_9 = 11 - let UC_MIPS_REG_10 = 12 - let UC_MIPS_REG_11 = 13 - let UC_MIPS_REG_12 = 14 - let UC_MIPS_REG_13 = 15 - let UC_MIPS_REG_14 = 16 - let UC_MIPS_REG_15 = 17 - let UC_MIPS_REG_16 = 18 - let UC_MIPS_REG_17 = 19 - let UC_MIPS_REG_18 = 20 - let UC_MIPS_REG_19 = 21 - let UC_MIPS_REG_20 = 22 - let UC_MIPS_REG_21 = 23 - let UC_MIPS_REG_22 = 24 - let UC_MIPS_REG_23 = 25 - let UC_MIPS_REG_24 = 26 - let UC_MIPS_REG_25 = 27 - let UC_MIPS_REG_26 = 28 - let UC_MIPS_REG_27 = 29 - let UC_MIPS_REG_28 = 30 - let UC_MIPS_REG_29 = 31 - let UC_MIPS_REG_30 = 32 - let UC_MIPS_REG_31 = 33 - -// DSP registers - let UC_MIPS_REG_DSPCCOND = 34 - let UC_MIPS_REG_DSPCARRY = 35 - let UC_MIPS_REG_DSPEFI = 36 - let UC_MIPS_REG_DSPOUTFLAG = 37 - let UC_MIPS_REG_DSPOUTFLAG16_19 = 38 - let UC_MIPS_REG_DSPOUTFLAG20 = 39 - let UC_MIPS_REG_DSPOUTFLAG21 = 40 - let UC_MIPS_REG_DSPOUTFLAG22 = 41 - let UC_MIPS_REG_DSPOUTFLAG23 = 42 - let UC_MIPS_REG_DSPPOS = 43 - let UC_MIPS_REG_DSPSCOUNT = 44 - -// ACC registers - let UC_MIPS_REG_AC0 = 45 - let UC_MIPS_REG_AC1 = 46 - let UC_MIPS_REG_AC2 = 47 - let UC_MIPS_REG_AC3 = 48 - -// COP registers - let UC_MIPS_REG_CC0 = 49 - let UC_MIPS_REG_CC1 = 50 - let UC_MIPS_REG_CC2 = 51 - let UC_MIPS_REG_CC3 = 52 - let UC_MIPS_REG_CC4 = 53 - let UC_MIPS_REG_CC5 = 54 - let UC_MIPS_REG_CC6 = 55 - let UC_MIPS_REG_CC7 = 56 - -// FPU registers - let UC_MIPS_REG_F0 = 57 - let UC_MIPS_REG_F1 = 58 - let UC_MIPS_REG_F2 = 59 - let UC_MIPS_REG_F3 = 60 - let UC_MIPS_REG_F4 = 61 - let UC_MIPS_REG_F5 = 62 - let UC_MIPS_REG_F6 = 63 - let UC_MIPS_REG_F7 = 64 - let UC_MIPS_REG_F8 = 65 - let UC_MIPS_REG_F9 = 66 - let UC_MIPS_REG_F10 = 67 - let UC_MIPS_REG_F11 = 68 - let UC_MIPS_REG_F12 = 69 - let UC_MIPS_REG_F13 = 70 - let UC_MIPS_REG_F14 = 71 - let UC_MIPS_REG_F15 = 72 - let UC_MIPS_REG_F16 = 73 - let UC_MIPS_REG_F17 = 74 - let UC_MIPS_REG_F18 = 75 - let UC_MIPS_REG_F19 = 76 - let UC_MIPS_REG_F20 = 77 - let UC_MIPS_REG_F21 = 78 - let UC_MIPS_REG_F22 = 79 - let UC_MIPS_REG_F23 = 80 - let UC_MIPS_REG_F24 = 81 - let UC_MIPS_REG_F25 = 82 - let UC_MIPS_REG_F26 = 83 - let UC_MIPS_REG_F27 = 84 - let UC_MIPS_REG_F28 = 85 - let UC_MIPS_REG_F29 = 86 - let UC_MIPS_REG_F30 = 87 - let UC_MIPS_REG_F31 = 88 - let UC_MIPS_REG_FCC0 = 89 - let UC_MIPS_REG_FCC1 = 90 - let UC_MIPS_REG_FCC2 = 91 - let UC_MIPS_REG_FCC3 = 92 - let UC_MIPS_REG_FCC4 = 93 - let UC_MIPS_REG_FCC5 = 94 - let UC_MIPS_REG_FCC6 = 95 - let UC_MIPS_REG_FCC7 = 96 - -// AFPR128 - let UC_MIPS_REG_W0 = 97 - let UC_MIPS_REG_W1 = 98 - let UC_MIPS_REG_W2 = 99 - let UC_MIPS_REG_W3 = 100 - let UC_MIPS_REG_W4 = 101 - let UC_MIPS_REG_W5 = 102 - let UC_MIPS_REG_W6 = 103 - let UC_MIPS_REG_W7 = 104 - let UC_MIPS_REG_W8 = 105 - let UC_MIPS_REG_W9 = 106 - let UC_MIPS_REG_W10 = 107 - let UC_MIPS_REG_W11 = 108 - let UC_MIPS_REG_W12 = 109 - let UC_MIPS_REG_W13 = 110 - let UC_MIPS_REG_W14 = 111 - let UC_MIPS_REG_W15 = 112 - let UC_MIPS_REG_W16 = 113 - let UC_MIPS_REG_W17 = 114 - let UC_MIPS_REG_W18 = 115 - let UC_MIPS_REG_W19 = 116 - let UC_MIPS_REG_W20 = 117 - let UC_MIPS_REG_W21 = 118 - let UC_MIPS_REG_W22 = 119 - let UC_MIPS_REG_W23 = 120 - let UC_MIPS_REG_W24 = 121 - let UC_MIPS_REG_W25 = 122 - let UC_MIPS_REG_W26 = 123 - let UC_MIPS_REG_W27 = 124 - let UC_MIPS_REG_W28 = 125 - let UC_MIPS_REG_W29 = 126 - let UC_MIPS_REG_W30 = 127 - let UC_MIPS_REG_W31 = 128 - let UC_MIPS_REG_HI = 129 - let UC_MIPS_REG_LO = 130 - let UC_MIPS_REG_P0 = 131 - let UC_MIPS_REG_P1 = 132 - let UC_MIPS_REG_P2 = 133 - let UC_MIPS_REG_MPL0 = 134 - let UC_MIPS_REG_MPL1 = 135 - let UC_MIPS_REG_MPL2 = 136 - let UC_MIPS_REG_ENDING = 137 - let UC_MIPS_REG_ZERO = 2 - let UC_MIPS_REG_AT = 3 - let UC_MIPS_REG_V0 = 4 - let UC_MIPS_REG_V1 = 5 - let UC_MIPS_REG_A0 = 6 - let UC_MIPS_REG_A1 = 7 - let UC_MIPS_REG_A2 = 8 - let UC_MIPS_REG_A3 = 9 - let UC_MIPS_REG_T0 = 10 - let UC_MIPS_REG_T1 = 11 - let UC_MIPS_REG_T2 = 12 - let UC_MIPS_REG_T3 = 13 - let UC_MIPS_REG_T4 = 14 - let UC_MIPS_REG_T5 = 15 - let UC_MIPS_REG_T6 = 16 - let UC_MIPS_REG_T7 = 17 - let UC_MIPS_REG_S0 = 18 - let UC_MIPS_REG_S1 = 19 - let UC_MIPS_REG_S2 = 20 - let UC_MIPS_REG_S3 = 21 - let UC_MIPS_REG_S4 = 22 - let UC_MIPS_REG_S5 = 23 - let UC_MIPS_REG_S6 = 24 - let UC_MIPS_REG_S7 = 25 - let UC_MIPS_REG_T8 = 26 - let UC_MIPS_REG_T9 = 27 - let UC_MIPS_REG_K0 = 28 - let UC_MIPS_REG_K1 = 29 - let UC_MIPS_REG_GP = 30 - let UC_MIPS_REG_SP = 31 - let UC_MIPS_REG_FP = 32 - let UC_MIPS_REG_S8 = 32 - let UC_MIPS_REG_RA = 33 - let UC_MIPS_REG_HI0 = 45 - let UC_MIPS_REG_HI1 = 46 - let UC_MIPS_REG_HI2 = 47 - let UC_MIPS_REG_HI3 = 48 - let UC_MIPS_REG_LO0 = 45 - let UC_MIPS_REG_LO1 = 46 - let UC_MIPS_REG_LO2 = 47 - let UC_MIPS_REG_LO3 = 48 - diff --git a/bindings/dotnet/Unicorn/Const/Sparc.fs b/bindings/dotnet/Unicorn/Const/Sparc.fs deleted file mode 100644 index 9d7d7e96..00000000 --- a/bindings/dotnet/Unicorn/Const/Sparc.fs +++ /dev/null @@ -1,104 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module Sparc = - -// SPARC registers - - let UC_SPARC_REG_INVALID = 0 - let UC_SPARC_REG_F0 = 1 - let UC_SPARC_REG_F1 = 2 - let UC_SPARC_REG_F2 = 3 - let UC_SPARC_REG_F3 = 4 - let UC_SPARC_REG_F4 = 5 - let UC_SPARC_REG_F5 = 6 - let UC_SPARC_REG_F6 = 7 - let UC_SPARC_REG_F7 = 8 - let UC_SPARC_REG_F8 = 9 - let UC_SPARC_REG_F9 = 10 - let UC_SPARC_REG_F10 = 11 - let UC_SPARC_REG_F11 = 12 - let UC_SPARC_REG_F12 = 13 - let UC_SPARC_REG_F13 = 14 - let UC_SPARC_REG_F14 = 15 - let UC_SPARC_REG_F15 = 16 - let UC_SPARC_REG_F16 = 17 - let UC_SPARC_REG_F17 = 18 - let UC_SPARC_REG_F18 = 19 - let UC_SPARC_REG_F19 = 20 - let UC_SPARC_REG_F20 = 21 - let UC_SPARC_REG_F21 = 22 - let UC_SPARC_REG_F22 = 23 - let UC_SPARC_REG_F23 = 24 - let UC_SPARC_REG_F24 = 25 - let UC_SPARC_REG_F25 = 26 - let UC_SPARC_REG_F26 = 27 - let UC_SPARC_REG_F27 = 28 - let UC_SPARC_REG_F28 = 29 - let UC_SPARC_REG_F29 = 30 - let UC_SPARC_REG_F30 = 31 - let UC_SPARC_REG_F31 = 32 - let UC_SPARC_REG_F32 = 33 - let UC_SPARC_REG_F34 = 34 - let UC_SPARC_REG_F36 = 35 - let UC_SPARC_REG_F38 = 36 - let UC_SPARC_REG_F40 = 37 - let UC_SPARC_REG_F42 = 38 - let UC_SPARC_REG_F44 = 39 - let UC_SPARC_REG_F46 = 40 - let UC_SPARC_REG_F48 = 41 - let UC_SPARC_REG_F50 = 42 - let UC_SPARC_REG_F52 = 43 - let UC_SPARC_REG_F54 = 44 - let UC_SPARC_REG_F56 = 45 - let UC_SPARC_REG_F58 = 46 - let UC_SPARC_REG_F60 = 47 - let UC_SPARC_REG_F62 = 48 - let UC_SPARC_REG_FCC0 = 49 - let UC_SPARC_REG_FCC1 = 50 - let UC_SPARC_REG_FCC2 = 51 - let UC_SPARC_REG_FCC3 = 52 - let UC_SPARC_REG_G0 = 53 - let UC_SPARC_REG_G1 = 54 - let UC_SPARC_REG_G2 = 55 - let UC_SPARC_REG_G3 = 56 - let UC_SPARC_REG_G4 = 57 - let UC_SPARC_REG_G5 = 58 - let UC_SPARC_REG_G6 = 59 - let UC_SPARC_REG_G7 = 60 - let UC_SPARC_REG_I0 = 61 - let UC_SPARC_REG_I1 = 62 - let UC_SPARC_REG_I2 = 63 - let UC_SPARC_REG_I3 = 64 - let UC_SPARC_REG_I4 = 65 - let UC_SPARC_REG_I5 = 66 - let UC_SPARC_REG_FP = 67 - let UC_SPARC_REG_I7 = 68 - let UC_SPARC_REG_ICC = 69 - let UC_SPARC_REG_L0 = 70 - let UC_SPARC_REG_L1 = 71 - let UC_SPARC_REG_L2 = 72 - let UC_SPARC_REG_L3 = 73 - let UC_SPARC_REG_L4 = 74 - let UC_SPARC_REG_L5 = 75 - let UC_SPARC_REG_L6 = 76 - let UC_SPARC_REG_L7 = 77 - let UC_SPARC_REG_O0 = 78 - let UC_SPARC_REG_O1 = 79 - let UC_SPARC_REG_O2 = 80 - let UC_SPARC_REG_O3 = 81 - let UC_SPARC_REG_O4 = 82 - let UC_SPARC_REG_O5 = 83 - let UC_SPARC_REG_SP = 84 - let UC_SPARC_REG_O7 = 85 - let UC_SPARC_REG_Y = 86 - let UC_SPARC_REG_XCC = 87 - let UC_SPARC_REG_PC = 88 - let UC_SPARC_REG_ENDING = 89 - let UC_SPARC_REG_O6 = 84 - let UC_SPARC_REG_I6 = 67 - diff --git a/bindings/dotnet/Unicorn/Const/X86.fs b/bindings/dotnet/Unicorn/Const/X86.fs deleted file mode 100644 index e1123792..00000000 --- a/bindings/dotnet/Unicorn/Const/X86.fs +++ /dev/null @@ -1,1597 +0,0 @@ -// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT - -namespace UnicornEngine.Const - -open System - -[] -module X86 = - -// X86 registers - - let UC_X86_REG_INVALID = 0 - let UC_X86_REG_AH = 1 - let UC_X86_REG_AL = 2 - let UC_X86_REG_AX = 3 - let UC_X86_REG_BH = 4 - let UC_X86_REG_BL = 5 - let UC_X86_REG_BP = 6 - let UC_X86_REG_BPL = 7 - let UC_X86_REG_BX = 8 - let UC_X86_REG_CH = 9 - let UC_X86_REG_CL = 10 - let UC_X86_REG_CS = 11 - let UC_X86_REG_CX = 12 - let UC_X86_REG_DH = 13 - let UC_X86_REG_DI = 14 - let UC_X86_REG_DIL = 15 - let UC_X86_REG_DL = 16 - let UC_X86_REG_DS = 17 - let UC_X86_REG_DX = 18 - let UC_X86_REG_EAX = 19 - let UC_X86_REG_EBP = 20 - let UC_X86_REG_EBX = 21 - let UC_X86_REG_ECX = 22 - let UC_X86_REG_EDI = 23 - let UC_X86_REG_EDX = 24 - let UC_X86_REG_EFLAGS = 25 - let UC_X86_REG_EIP = 26 - let UC_X86_REG_EIZ = 27 - let UC_X86_REG_ES = 28 - let UC_X86_REG_ESI = 29 - let UC_X86_REG_ESP = 30 - let UC_X86_REG_FPSW = 31 - let UC_X86_REG_FS = 32 - let UC_X86_REG_GS = 33 - let UC_X86_REG_IP = 34 - let UC_X86_REG_RAX = 35 - let UC_X86_REG_RBP = 36 - let UC_X86_REG_RBX = 37 - let UC_X86_REG_RCX = 38 - let UC_X86_REG_RDI = 39 - let UC_X86_REG_RDX = 40 - let UC_X86_REG_RIP = 41 - let UC_X86_REG_RIZ = 42 - let UC_X86_REG_RSI = 43 - let UC_X86_REG_RSP = 44 - let UC_X86_REG_SI = 45 - let UC_X86_REG_SIL = 46 - let UC_X86_REG_SP = 47 - let UC_X86_REG_SPL = 48 - let UC_X86_REG_SS = 49 - let UC_X86_REG_CR0 = 50 - let UC_X86_REG_CR1 = 51 - let UC_X86_REG_CR2 = 52 - let UC_X86_REG_CR3 = 53 - let UC_X86_REG_CR4 = 54 - let UC_X86_REG_CR5 = 55 - let UC_X86_REG_CR6 = 56 - let UC_X86_REG_CR7 = 57 - let UC_X86_REG_CR8 = 58 - let UC_X86_REG_CR9 = 59 - let UC_X86_REG_CR10 = 60 - let UC_X86_REG_CR11 = 61 - let UC_X86_REG_CR12 = 62 - let UC_X86_REG_CR13 = 63 - let UC_X86_REG_CR14 = 64 - let UC_X86_REG_CR15 = 65 - let UC_X86_REG_DR0 = 66 - let UC_X86_REG_DR1 = 67 - let UC_X86_REG_DR2 = 68 - let UC_X86_REG_DR3 = 69 - let UC_X86_REG_DR4 = 70 - let UC_X86_REG_DR5 = 71 - let UC_X86_REG_DR6 = 72 - let UC_X86_REG_DR7 = 73 - let UC_X86_REG_DR8 = 74 - let UC_X86_REG_DR9 = 75 - let UC_X86_REG_DR10 = 76 - let UC_X86_REG_DR11 = 77 - let UC_X86_REG_DR12 = 78 - let UC_X86_REG_DR13 = 79 - let UC_X86_REG_DR14 = 80 - let UC_X86_REG_DR15 = 81 - let UC_X86_REG_FP0 = 82 - let UC_X86_REG_FP1 = 83 - let UC_X86_REG_FP2 = 84 - let UC_X86_REG_FP3 = 85 - let UC_X86_REG_FP4 = 86 - let UC_X86_REG_FP5 = 87 - let UC_X86_REG_FP6 = 88 - let UC_X86_REG_FP7 = 89 - let UC_X86_REG_K0 = 90 - let UC_X86_REG_K1 = 91 - let UC_X86_REG_K2 = 92 - let UC_X86_REG_K3 = 93 - let UC_X86_REG_K4 = 94 - let UC_X86_REG_K5 = 95 - let UC_X86_REG_K6 = 96 - let UC_X86_REG_K7 = 97 - let UC_X86_REG_MM0 = 98 - let UC_X86_REG_MM1 = 99 - let UC_X86_REG_MM2 = 100 - let UC_X86_REG_MM3 = 101 - let UC_X86_REG_MM4 = 102 - let UC_X86_REG_MM5 = 103 - let UC_X86_REG_MM6 = 104 - let UC_X86_REG_MM7 = 105 - let UC_X86_REG_R8 = 106 - let UC_X86_REG_R9 = 107 - let UC_X86_REG_R10 = 108 - let UC_X86_REG_R11 = 109 - let UC_X86_REG_R12 = 110 - let UC_X86_REG_R13 = 111 - let UC_X86_REG_R14 = 112 - let UC_X86_REG_R15 = 113 - let UC_X86_REG_ST0 = 114 - let UC_X86_REG_ST1 = 115 - let UC_X86_REG_ST2 = 116 - let UC_X86_REG_ST3 = 117 - let UC_X86_REG_ST4 = 118 - let UC_X86_REG_ST5 = 119 - let UC_X86_REG_ST6 = 120 - let UC_X86_REG_ST7 = 121 - let UC_X86_REG_XMM0 = 122 - let UC_X86_REG_XMM1 = 123 - let UC_X86_REG_XMM2 = 124 - let UC_X86_REG_XMM3 = 125 - let UC_X86_REG_XMM4 = 126 - let UC_X86_REG_XMM5 = 127 - let UC_X86_REG_XMM6 = 128 - let UC_X86_REG_XMM7 = 129 - let UC_X86_REG_XMM8 = 130 - let UC_X86_REG_XMM9 = 131 - let UC_X86_REG_XMM10 = 132 - let UC_X86_REG_XMM11 = 133 - let UC_X86_REG_XMM12 = 134 - let UC_X86_REG_XMM13 = 135 - let UC_X86_REG_XMM14 = 136 - let UC_X86_REG_XMM15 = 137 - let UC_X86_REG_XMM16 = 138 - let UC_X86_REG_XMM17 = 139 - let UC_X86_REG_XMM18 = 140 - let UC_X86_REG_XMM19 = 141 - let UC_X86_REG_XMM20 = 142 - let UC_X86_REG_XMM21 = 143 - let UC_X86_REG_XMM22 = 144 - let UC_X86_REG_XMM23 = 145 - let UC_X86_REG_XMM24 = 146 - let UC_X86_REG_XMM25 = 147 - let UC_X86_REG_XMM26 = 148 - let UC_X86_REG_XMM27 = 149 - let UC_X86_REG_XMM28 = 150 - let UC_X86_REG_XMM29 = 151 - let UC_X86_REG_XMM30 = 152 - let UC_X86_REG_XMM31 = 153 - let UC_X86_REG_YMM0 = 154 - let UC_X86_REG_YMM1 = 155 - let UC_X86_REG_YMM2 = 156 - let UC_X86_REG_YMM3 = 157 - let UC_X86_REG_YMM4 = 158 - let UC_X86_REG_YMM5 = 159 - let UC_X86_REG_YMM6 = 160 - let UC_X86_REG_YMM7 = 161 - let UC_X86_REG_YMM8 = 162 - let UC_X86_REG_YMM9 = 163 - let UC_X86_REG_YMM10 = 164 - let UC_X86_REG_YMM11 = 165 - let UC_X86_REG_YMM12 = 166 - let UC_X86_REG_YMM13 = 167 - let UC_X86_REG_YMM14 = 168 - let UC_X86_REG_YMM15 = 169 - let UC_X86_REG_YMM16 = 170 - let UC_X86_REG_YMM17 = 171 - let UC_X86_REG_YMM18 = 172 - let UC_X86_REG_YMM19 = 173 - let UC_X86_REG_YMM20 = 174 - let UC_X86_REG_YMM21 = 175 - let UC_X86_REG_YMM22 = 176 - let UC_X86_REG_YMM23 = 177 - let UC_X86_REG_YMM24 = 178 - let UC_X86_REG_YMM25 = 179 - let UC_X86_REG_YMM26 = 180 - let UC_X86_REG_YMM27 = 181 - let UC_X86_REG_YMM28 = 182 - let UC_X86_REG_YMM29 = 183 - let UC_X86_REG_YMM30 = 184 - let UC_X86_REG_YMM31 = 185 - let UC_X86_REG_ZMM0 = 186 - let UC_X86_REG_ZMM1 = 187 - let UC_X86_REG_ZMM2 = 188 - let UC_X86_REG_ZMM3 = 189 - let UC_X86_REG_ZMM4 = 190 - let UC_X86_REG_ZMM5 = 191 - let UC_X86_REG_ZMM6 = 192 - let UC_X86_REG_ZMM7 = 193 - let UC_X86_REG_ZMM8 = 194 - let UC_X86_REG_ZMM9 = 195 - let UC_X86_REG_ZMM10 = 196 - let UC_X86_REG_ZMM11 = 197 - let UC_X86_REG_ZMM12 = 198 - let UC_X86_REG_ZMM13 = 199 - let UC_X86_REG_ZMM14 = 200 - let UC_X86_REG_ZMM15 = 201 - let UC_X86_REG_ZMM16 = 202 - let UC_X86_REG_ZMM17 = 203 - let UC_X86_REG_ZMM18 = 204 - let UC_X86_REG_ZMM19 = 205 - let UC_X86_REG_ZMM20 = 206 - let UC_X86_REG_ZMM21 = 207 - let UC_X86_REG_ZMM22 = 208 - let UC_X86_REG_ZMM23 = 209 - let UC_X86_REG_ZMM24 = 210 - let UC_X86_REG_ZMM25 = 211 - let UC_X86_REG_ZMM26 = 212 - let UC_X86_REG_ZMM27 = 213 - let UC_X86_REG_ZMM28 = 214 - let UC_X86_REG_ZMM29 = 215 - let UC_X86_REG_ZMM30 = 216 - let UC_X86_REG_ZMM31 = 217 - let UC_X86_REG_R8B = 218 - let UC_X86_REG_R9B = 219 - let UC_X86_REG_R10B = 220 - let UC_X86_REG_R11B = 221 - let UC_X86_REG_R12B = 222 - let UC_X86_REG_R13B = 223 - let UC_X86_REG_R14B = 224 - let UC_X86_REG_R15B = 225 - let UC_X86_REG_R8D = 226 - let UC_X86_REG_R9D = 227 - let UC_X86_REG_R10D = 228 - let UC_X86_REG_R11D = 229 - let UC_X86_REG_R12D = 230 - let UC_X86_REG_R13D = 231 - let UC_X86_REG_R14D = 232 - let UC_X86_REG_R15D = 233 - let UC_X86_REG_R8W = 234 - let UC_X86_REG_R9W = 235 - let UC_X86_REG_R10W = 236 - let UC_X86_REG_R11W = 237 - let UC_X86_REG_R12W = 238 - let UC_X86_REG_R13W = 239 - let UC_X86_REG_R14W = 240 - let UC_X86_REG_R15W = 241 - let UC_X86_REG_ENDING = 242 - -// X86 instructions - - let UC_X86_INS_INVALID = 0 - let UC_X86_INS_AAA = 1 - let UC_X86_INS_AAD = 2 - let UC_X86_INS_AAM = 3 - let UC_X86_INS_AAS = 4 - let UC_X86_INS_FABS = 5 - let UC_X86_INS_ADC = 6 - let UC_X86_INS_ADCX = 7 - let UC_X86_INS_ADD = 8 - let UC_X86_INS_ADDPD = 9 - let UC_X86_INS_ADDPS = 10 - let UC_X86_INS_ADDSD = 11 - let UC_X86_INS_ADDSS = 12 - let UC_X86_INS_ADDSUBPD = 13 - let UC_X86_INS_ADDSUBPS = 14 - let UC_X86_INS_FADD = 15 - let UC_X86_INS_FIADD = 16 - let UC_X86_INS_FADDP = 17 - let UC_X86_INS_ADOX = 18 - let UC_X86_INS_AESDECLAST = 19 - let UC_X86_INS_AESDEC = 20 - let UC_X86_INS_AESENCLAST = 21 - let UC_X86_INS_AESENC = 22 - let UC_X86_INS_AESIMC = 23 - let UC_X86_INS_AESKEYGENASSIST = 24 - let UC_X86_INS_AND = 25 - let UC_X86_INS_ANDN = 26 - let UC_X86_INS_ANDNPD = 27 - let UC_X86_INS_ANDNPS = 28 - let UC_X86_INS_ANDPD = 29 - let UC_X86_INS_ANDPS = 30 - let UC_X86_INS_ARPL = 31 - let UC_X86_INS_BEXTR = 32 - let UC_X86_INS_BLCFILL = 33 - let UC_X86_INS_BLCI = 34 - let UC_X86_INS_BLCIC = 35 - let UC_X86_INS_BLCMSK = 36 - let UC_X86_INS_BLCS = 37 - let UC_X86_INS_BLENDPD = 38 - let UC_X86_INS_BLENDPS = 39 - let UC_X86_INS_BLENDVPD = 40 - let UC_X86_INS_BLENDVPS = 41 - let UC_X86_INS_BLSFILL = 42 - let UC_X86_INS_BLSI = 43 - let UC_X86_INS_BLSIC = 44 - let UC_X86_INS_BLSMSK = 45 - let UC_X86_INS_BLSR = 46 - let UC_X86_INS_BOUND = 47 - let UC_X86_INS_BSF = 48 - let UC_X86_INS_BSR = 49 - let UC_X86_INS_BSWAP = 50 - let UC_X86_INS_BT = 51 - let UC_X86_INS_BTC = 52 - let UC_X86_INS_BTR = 53 - let UC_X86_INS_BTS = 54 - let UC_X86_INS_BZHI = 55 - let UC_X86_INS_CALL = 56 - let UC_X86_INS_CBW = 57 - let UC_X86_INS_CDQ = 58 - let UC_X86_INS_CDQE = 59 - let UC_X86_INS_FCHS = 60 - let UC_X86_INS_CLAC = 61 - let UC_X86_INS_CLC = 62 - let UC_X86_INS_CLD = 63 - let UC_X86_INS_CLFLUSH = 64 - let UC_X86_INS_CLFLUSHOPT = 65 - let UC_X86_INS_CLGI = 66 - let UC_X86_INS_CLI = 67 - let UC_X86_INS_CLTS = 68 - let UC_X86_INS_CLWB = 69 - let UC_X86_INS_CMC = 70 - let UC_X86_INS_CMOVA = 71 - let UC_X86_INS_CMOVAE = 72 - let UC_X86_INS_CMOVB = 73 - let UC_X86_INS_CMOVBE = 74 - let UC_X86_INS_FCMOVBE = 75 - let UC_X86_INS_FCMOVB = 76 - let UC_X86_INS_CMOVE = 77 - let UC_X86_INS_FCMOVE = 78 - let UC_X86_INS_CMOVG = 79 - let UC_X86_INS_CMOVGE = 80 - let UC_X86_INS_CMOVL = 81 - let UC_X86_INS_CMOVLE = 82 - let UC_X86_INS_FCMOVNBE = 83 - let UC_X86_INS_FCMOVNB = 84 - let UC_X86_INS_CMOVNE = 85 - let UC_X86_INS_FCMOVNE = 86 - let UC_X86_INS_CMOVNO = 87 - let UC_X86_INS_CMOVNP = 88 - let UC_X86_INS_FCMOVNU = 89 - let UC_X86_INS_CMOVNS = 90 - let UC_X86_INS_CMOVO = 91 - let UC_X86_INS_CMOVP = 92 - let UC_X86_INS_FCMOVU = 93 - let UC_X86_INS_CMOVS = 94 - let UC_X86_INS_CMP = 95 - let UC_X86_INS_CMPPD = 96 - let UC_X86_INS_CMPPS = 97 - let UC_X86_INS_CMPSB = 98 - let UC_X86_INS_CMPSD = 99 - let UC_X86_INS_CMPSQ = 100 - let UC_X86_INS_CMPSS = 101 - let UC_X86_INS_CMPSW = 102 - let UC_X86_INS_CMPXCHG16B = 103 - let UC_X86_INS_CMPXCHG = 104 - let UC_X86_INS_CMPXCHG8B = 105 - let UC_X86_INS_COMISD = 106 - let UC_X86_INS_COMISS = 107 - let UC_X86_INS_FCOMP = 108 - let UC_X86_INS_FCOMPI = 109 - let UC_X86_INS_FCOMI = 110 - let UC_X86_INS_FCOM = 111 - let UC_X86_INS_FCOS = 112 - let UC_X86_INS_CPUID = 113 - let UC_X86_INS_CQO = 114 - let UC_X86_INS_CRC32 = 115 - let UC_X86_INS_CVTDQ2PD = 116 - let UC_X86_INS_CVTDQ2PS = 117 - let UC_X86_INS_CVTPD2DQ = 118 - let UC_X86_INS_CVTPD2PS = 119 - let UC_X86_INS_CVTPS2DQ = 120 - let UC_X86_INS_CVTPS2PD = 121 - let UC_X86_INS_CVTSD2SI = 122 - let UC_X86_INS_CVTSD2SS = 123 - let UC_X86_INS_CVTSI2SD = 124 - let UC_X86_INS_CVTSI2SS = 125 - let UC_X86_INS_CVTSS2SD = 126 - let UC_X86_INS_CVTSS2SI = 127 - let UC_X86_INS_CVTTPD2DQ = 128 - let UC_X86_INS_CVTTPS2DQ = 129 - let UC_X86_INS_CVTTSD2SI = 130 - let UC_X86_INS_CVTTSS2SI = 131 - let UC_X86_INS_CWD = 132 - let UC_X86_INS_CWDE = 133 - let UC_X86_INS_DAA = 134 - let UC_X86_INS_DAS = 135 - let UC_X86_INS_DATA16 = 136 - let UC_X86_INS_DEC = 137 - let UC_X86_INS_DIV = 138 - let UC_X86_INS_DIVPD = 139 - let UC_X86_INS_DIVPS = 140 - let UC_X86_INS_FDIVR = 141 - let UC_X86_INS_FIDIVR = 142 - let UC_X86_INS_FDIVRP = 143 - let UC_X86_INS_DIVSD = 144 - let UC_X86_INS_DIVSS = 145 - let UC_X86_INS_FDIV = 146 - let UC_X86_INS_FIDIV = 147 - let UC_X86_INS_FDIVP = 148 - let UC_X86_INS_DPPD = 149 - let UC_X86_INS_DPPS = 150 - let UC_X86_INS_RET = 151 - let UC_X86_INS_ENCLS = 152 - let UC_X86_INS_ENCLU = 153 - let UC_X86_INS_ENTER = 154 - let UC_X86_INS_EXTRACTPS = 155 - let UC_X86_INS_EXTRQ = 156 - let UC_X86_INS_F2XM1 = 157 - let UC_X86_INS_LCALL = 158 - let UC_X86_INS_LJMP = 159 - let UC_X86_INS_FBLD = 160 - let UC_X86_INS_FBSTP = 161 - let UC_X86_INS_FCOMPP = 162 - let UC_X86_INS_FDECSTP = 163 - let UC_X86_INS_FEMMS = 164 - let UC_X86_INS_FFREE = 165 - let UC_X86_INS_FICOM = 166 - let UC_X86_INS_FICOMP = 167 - let UC_X86_INS_FINCSTP = 168 - let UC_X86_INS_FLDCW = 169 - let UC_X86_INS_FLDENV = 170 - let UC_X86_INS_FLDL2E = 171 - let UC_X86_INS_FLDL2T = 172 - let UC_X86_INS_FLDLG2 = 173 - let UC_X86_INS_FLDLN2 = 174 - let UC_X86_INS_FLDPI = 175 - let UC_X86_INS_FNCLEX = 176 - let UC_X86_INS_FNINIT = 177 - let UC_X86_INS_FNOP = 178 - let UC_X86_INS_FNSTCW = 179 - let UC_X86_INS_FNSTSW = 180 - let UC_X86_INS_FPATAN = 181 - let UC_X86_INS_FPREM = 182 - let UC_X86_INS_FPREM1 = 183 - let UC_X86_INS_FPTAN = 184 - let UC_X86_INS_FFREEP = 185 - let UC_X86_INS_FRNDINT = 186 - let UC_X86_INS_FRSTOR = 187 - let UC_X86_INS_FNSAVE = 188 - let UC_X86_INS_FSCALE = 189 - let UC_X86_INS_FSETPM = 190 - let UC_X86_INS_FSINCOS = 191 - let UC_X86_INS_FNSTENV = 192 - let UC_X86_INS_FXAM = 193 - let UC_X86_INS_FXRSTOR = 194 - let UC_X86_INS_FXRSTOR64 = 195 - let UC_X86_INS_FXSAVE = 196 - let UC_X86_INS_FXSAVE64 = 197 - let UC_X86_INS_FXTRACT = 198 - let UC_X86_INS_FYL2X = 199 - let UC_X86_INS_FYL2XP1 = 200 - let UC_X86_INS_MOVAPD = 201 - let UC_X86_INS_MOVAPS = 202 - let UC_X86_INS_ORPD = 203 - let UC_X86_INS_ORPS = 204 - let UC_X86_INS_VMOVAPD = 205 - let UC_X86_INS_VMOVAPS = 206 - let UC_X86_INS_XORPD = 207 - let UC_X86_INS_XORPS = 208 - let UC_X86_INS_GETSEC = 209 - let UC_X86_INS_HADDPD = 210 - let UC_X86_INS_HADDPS = 211 - let UC_X86_INS_HLT = 212 - let UC_X86_INS_HSUBPD = 213 - let UC_X86_INS_HSUBPS = 214 - let UC_X86_INS_IDIV = 215 - let UC_X86_INS_FILD = 216 - let UC_X86_INS_IMUL = 217 - let UC_X86_INS_IN = 218 - let UC_X86_INS_INC = 219 - let UC_X86_INS_INSB = 220 - let UC_X86_INS_INSERTPS = 221 - let UC_X86_INS_INSERTQ = 222 - let UC_X86_INS_INSD = 223 - let UC_X86_INS_INSW = 224 - let UC_X86_INS_INT = 225 - let UC_X86_INS_INT1 = 226 - let UC_X86_INS_INT3 = 227 - let UC_X86_INS_INTO = 228 - let UC_X86_INS_INVD = 229 - let UC_X86_INS_INVEPT = 230 - let UC_X86_INS_INVLPG = 231 - let UC_X86_INS_INVLPGA = 232 - let UC_X86_INS_INVPCID = 233 - let UC_X86_INS_INVVPID = 234 - let UC_X86_INS_IRET = 235 - let UC_X86_INS_IRETD = 236 - let UC_X86_INS_IRETQ = 237 - let UC_X86_INS_FISTTP = 238 - let UC_X86_INS_FIST = 239 - let UC_X86_INS_FISTP = 240 - let UC_X86_INS_UCOMISD = 241 - let UC_X86_INS_UCOMISS = 242 - let UC_X86_INS_VCOMISD = 243 - let UC_X86_INS_VCOMISS = 244 - let UC_X86_INS_VCVTSD2SS = 245 - let UC_X86_INS_VCVTSI2SD = 246 - let UC_X86_INS_VCVTSI2SS = 247 - let UC_X86_INS_VCVTSS2SD = 248 - let UC_X86_INS_VCVTTSD2SI = 249 - let UC_X86_INS_VCVTTSD2USI = 250 - let UC_X86_INS_VCVTTSS2SI = 251 - let UC_X86_INS_VCVTTSS2USI = 252 - let UC_X86_INS_VCVTUSI2SD = 253 - let UC_X86_INS_VCVTUSI2SS = 254 - let UC_X86_INS_VUCOMISD = 255 - let UC_X86_INS_VUCOMISS = 256 - let UC_X86_INS_JAE = 257 - let UC_X86_INS_JA = 258 - let UC_X86_INS_JBE = 259 - let UC_X86_INS_JB = 260 - let UC_X86_INS_JCXZ = 261 - let UC_X86_INS_JECXZ = 262 - let UC_X86_INS_JE = 263 - let UC_X86_INS_JGE = 264 - let UC_X86_INS_JG = 265 - let UC_X86_INS_JLE = 266 - let UC_X86_INS_JL = 267 - let UC_X86_INS_JMP = 268 - let UC_X86_INS_JNE = 269 - let UC_X86_INS_JNO = 270 - let UC_X86_INS_JNP = 271 - let UC_X86_INS_JNS = 272 - let UC_X86_INS_JO = 273 - let UC_X86_INS_JP = 274 - let UC_X86_INS_JRCXZ = 275 - let UC_X86_INS_JS = 276 - let UC_X86_INS_KANDB = 277 - let UC_X86_INS_KANDD = 278 - let UC_X86_INS_KANDNB = 279 - let UC_X86_INS_KANDND = 280 - let UC_X86_INS_KANDNQ = 281 - let UC_X86_INS_KANDNW = 282 - let UC_X86_INS_KANDQ = 283 - let UC_X86_INS_KANDW = 284 - let UC_X86_INS_KMOVB = 285 - let UC_X86_INS_KMOVD = 286 - let UC_X86_INS_KMOVQ = 287 - let UC_X86_INS_KMOVW = 288 - let UC_X86_INS_KNOTB = 289 - let UC_X86_INS_KNOTD = 290 - let UC_X86_INS_KNOTQ = 291 - let UC_X86_INS_KNOTW = 292 - let UC_X86_INS_KORB = 293 - let UC_X86_INS_KORD = 294 - let UC_X86_INS_KORQ = 295 - let UC_X86_INS_KORTESTB = 296 - let UC_X86_INS_KORTESTD = 297 - let UC_X86_INS_KORTESTQ = 298 - let UC_X86_INS_KORTESTW = 299 - let UC_X86_INS_KORW = 300 - let UC_X86_INS_KSHIFTLB = 301 - let UC_X86_INS_KSHIFTLD = 302 - let UC_X86_INS_KSHIFTLQ = 303 - let UC_X86_INS_KSHIFTLW = 304 - let UC_X86_INS_KSHIFTRB = 305 - let UC_X86_INS_KSHIFTRD = 306 - let UC_X86_INS_KSHIFTRQ = 307 - let UC_X86_INS_KSHIFTRW = 308 - let UC_X86_INS_KUNPCKBW = 309 - let UC_X86_INS_KXNORB = 310 - let UC_X86_INS_KXNORD = 311 - let UC_X86_INS_KXNORQ = 312 - let UC_X86_INS_KXNORW = 313 - let UC_X86_INS_KXORB = 314 - let UC_X86_INS_KXORD = 315 - let UC_X86_INS_KXORQ = 316 - let UC_X86_INS_KXORW = 317 - let UC_X86_INS_LAHF = 318 - let UC_X86_INS_LAR = 319 - let UC_X86_INS_LDDQU = 320 - let UC_X86_INS_LDMXCSR = 321 - let UC_X86_INS_LDS = 322 - let UC_X86_INS_FLDZ = 323 - let UC_X86_INS_FLD1 = 324 - let UC_X86_INS_FLD = 325 - let UC_X86_INS_LEA = 326 - let UC_X86_INS_LEAVE = 327 - let UC_X86_INS_LES = 328 - let UC_X86_INS_LFENCE = 329 - let UC_X86_INS_LFS = 330 - let UC_X86_INS_LGDT = 331 - let UC_X86_INS_LGS = 332 - let UC_X86_INS_LIDT = 333 - let UC_X86_INS_LLDT = 334 - let UC_X86_INS_LMSW = 335 - let UC_X86_INS_OR = 336 - let UC_X86_INS_SUB = 337 - let UC_X86_INS_XOR = 338 - let UC_X86_INS_LODSB = 339 - let UC_X86_INS_LODSD = 340 - let UC_X86_INS_LODSQ = 341 - let UC_X86_INS_LODSW = 342 - let UC_X86_INS_LOOP = 343 - let UC_X86_INS_LOOPE = 344 - let UC_X86_INS_LOOPNE = 345 - let UC_X86_INS_RETF = 346 - let UC_X86_INS_RETFQ = 347 - let UC_X86_INS_LSL = 348 - let UC_X86_INS_LSS = 349 - let UC_X86_INS_LTR = 350 - let UC_X86_INS_XADD = 351 - let UC_X86_INS_LZCNT = 352 - let UC_X86_INS_MASKMOVDQU = 353 - let UC_X86_INS_MAXPD = 354 - let UC_X86_INS_MAXPS = 355 - let UC_X86_INS_MAXSD = 356 - let UC_X86_INS_MAXSS = 357 - let UC_X86_INS_MFENCE = 358 - let UC_X86_INS_MINPD = 359 - let UC_X86_INS_MINPS = 360 - let UC_X86_INS_MINSD = 361 - let UC_X86_INS_MINSS = 362 - let UC_X86_INS_CVTPD2PI = 363 - let UC_X86_INS_CVTPI2PD = 364 - let UC_X86_INS_CVTPI2PS = 365 - let UC_X86_INS_CVTPS2PI = 366 - let UC_X86_INS_CVTTPD2PI = 367 - let UC_X86_INS_CVTTPS2PI = 368 - let UC_X86_INS_EMMS = 369 - let UC_X86_INS_MASKMOVQ = 370 - let UC_X86_INS_MOVD = 371 - let UC_X86_INS_MOVDQ2Q = 372 - let UC_X86_INS_MOVNTQ = 373 - let UC_X86_INS_MOVQ2DQ = 374 - let UC_X86_INS_MOVQ = 375 - let UC_X86_INS_PABSB = 376 - let UC_X86_INS_PABSD = 377 - let UC_X86_INS_PABSW = 378 - let UC_X86_INS_PACKSSDW = 379 - let UC_X86_INS_PACKSSWB = 380 - let UC_X86_INS_PACKUSWB = 381 - let UC_X86_INS_PADDB = 382 - let UC_X86_INS_PADDD = 383 - let UC_X86_INS_PADDQ = 384 - let UC_X86_INS_PADDSB = 385 - let UC_X86_INS_PADDSW = 386 - let UC_X86_INS_PADDUSB = 387 - let UC_X86_INS_PADDUSW = 388 - let UC_X86_INS_PADDW = 389 - let UC_X86_INS_PALIGNR = 390 - let UC_X86_INS_PANDN = 391 - let UC_X86_INS_PAND = 392 - let UC_X86_INS_PAVGB = 393 - let UC_X86_INS_PAVGW = 394 - let UC_X86_INS_PCMPEQB = 395 - let UC_X86_INS_PCMPEQD = 396 - let UC_X86_INS_PCMPEQW = 397 - let UC_X86_INS_PCMPGTB = 398 - let UC_X86_INS_PCMPGTD = 399 - let UC_X86_INS_PCMPGTW = 400 - let UC_X86_INS_PEXTRW = 401 - let UC_X86_INS_PHADDSW = 402 - let UC_X86_INS_PHADDW = 403 - let UC_X86_INS_PHADDD = 404 - let UC_X86_INS_PHSUBD = 405 - let UC_X86_INS_PHSUBSW = 406 - let UC_X86_INS_PHSUBW = 407 - let UC_X86_INS_PINSRW = 408 - let UC_X86_INS_PMADDUBSW = 409 - let UC_X86_INS_PMADDWD = 410 - let UC_X86_INS_PMAXSW = 411 - let UC_X86_INS_PMAXUB = 412 - let UC_X86_INS_PMINSW = 413 - let UC_X86_INS_PMINUB = 414 - let UC_X86_INS_PMOVMSKB = 415 - let UC_X86_INS_PMULHRSW = 416 - let UC_X86_INS_PMULHUW = 417 - let UC_X86_INS_PMULHW = 418 - let UC_X86_INS_PMULLW = 419 - let UC_X86_INS_PMULUDQ = 420 - let UC_X86_INS_POR = 421 - let UC_X86_INS_PSADBW = 422 - let UC_X86_INS_PSHUFB = 423 - let UC_X86_INS_PSHUFW = 424 - let UC_X86_INS_PSIGNB = 425 - let UC_X86_INS_PSIGND = 426 - let UC_X86_INS_PSIGNW = 427 - let UC_X86_INS_PSLLD = 428 - let UC_X86_INS_PSLLQ = 429 - let UC_X86_INS_PSLLW = 430 - let UC_X86_INS_PSRAD = 431 - let UC_X86_INS_PSRAW = 432 - let UC_X86_INS_PSRLD = 433 - let UC_X86_INS_PSRLQ = 434 - let UC_X86_INS_PSRLW = 435 - let UC_X86_INS_PSUBB = 436 - let UC_X86_INS_PSUBD = 437 - let UC_X86_INS_PSUBQ = 438 - let UC_X86_INS_PSUBSB = 439 - let UC_X86_INS_PSUBSW = 440 - let UC_X86_INS_PSUBUSB = 441 - let UC_X86_INS_PSUBUSW = 442 - let UC_X86_INS_PSUBW = 443 - let UC_X86_INS_PUNPCKHBW = 444 - let UC_X86_INS_PUNPCKHDQ = 445 - let UC_X86_INS_PUNPCKHWD = 446 - let UC_X86_INS_PUNPCKLBW = 447 - let UC_X86_INS_PUNPCKLDQ = 448 - let UC_X86_INS_PUNPCKLWD = 449 - let UC_X86_INS_PXOR = 450 - let UC_X86_INS_MONITOR = 451 - let UC_X86_INS_MONTMUL = 452 - let UC_X86_INS_MOV = 453 - let UC_X86_INS_MOVABS = 454 - let UC_X86_INS_MOVBE = 455 - let UC_X86_INS_MOVDDUP = 456 - let UC_X86_INS_MOVDQA = 457 - let UC_X86_INS_MOVDQU = 458 - let UC_X86_INS_MOVHLPS = 459 - let UC_X86_INS_MOVHPD = 460 - let UC_X86_INS_MOVHPS = 461 - let UC_X86_INS_MOVLHPS = 462 - let UC_X86_INS_MOVLPD = 463 - let UC_X86_INS_MOVLPS = 464 - let UC_X86_INS_MOVMSKPD = 465 - let UC_X86_INS_MOVMSKPS = 466 - let UC_X86_INS_MOVNTDQA = 467 - let UC_X86_INS_MOVNTDQ = 468 - let UC_X86_INS_MOVNTI = 469 - let UC_X86_INS_MOVNTPD = 470 - let UC_X86_INS_MOVNTPS = 471 - let UC_X86_INS_MOVNTSD = 472 - let UC_X86_INS_MOVNTSS = 473 - let UC_X86_INS_MOVSB = 474 - let UC_X86_INS_MOVSD = 475 - let UC_X86_INS_MOVSHDUP = 476 - let UC_X86_INS_MOVSLDUP = 477 - let UC_X86_INS_MOVSQ = 478 - let UC_X86_INS_MOVSS = 479 - let UC_X86_INS_MOVSW = 480 - let UC_X86_INS_MOVSX = 481 - let UC_X86_INS_MOVSXD = 482 - let UC_X86_INS_MOVUPD = 483 - let UC_X86_INS_MOVUPS = 484 - let UC_X86_INS_MOVZX = 485 - let UC_X86_INS_MPSADBW = 486 - let UC_X86_INS_MUL = 487 - let UC_X86_INS_MULPD = 488 - let UC_X86_INS_MULPS = 489 - let UC_X86_INS_MULSD = 490 - let UC_X86_INS_MULSS = 491 - let UC_X86_INS_MULX = 492 - let UC_X86_INS_FMUL = 493 - let UC_X86_INS_FIMUL = 494 - let UC_X86_INS_FMULP = 495 - let UC_X86_INS_MWAIT = 496 - let UC_X86_INS_NEG = 497 - let UC_X86_INS_NOP = 498 - let UC_X86_INS_NOT = 499 - let UC_X86_INS_OUT = 500 - let UC_X86_INS_OUTSB = 501 - let UC_X86_INS_OUTSD = 502 - let UC_X86_INS_OUTSW = 503 - let UC_X86_INS_PACKUSDW = 504 - let UC_X86_INS_PAUSE = 505 - let UC_X86_INS_PAVGUSB = 506 - let UC_X86_INS_PBLENDVB = 507 - let UC_X86_INS_PBLENDW = 508 - let UC_X86_INS_PCLMULQDQ = 509 - let UC_X86_INS_PCMPEQQ = 510 - let UC_X86_INS_PCMPESTRI = 511 - let UC_X86_INS_PCMPESTRM = 512 - let UC_X86_INS_PCMPGTQ = 513 - let UC_X86_INS_PCMPISTRI = 514 - let UC_X86_INS_PCMPISTRM = 515 - let UC_X86_INS_PCOMMIT = 516 - let UC_X86_INS_PDEP = 517 - let UC_X86_INS_PEXT = 518 - let UC_X86_INS_PEXTRB = 519 - let UC_X86_INS_PEXTRD = 520 - let UC_X86_INS_PEXTRQ = 521 - let UC_X86_INS_PF2ID = 522 - let UC_X86_INS_PF2IW = 523 - let UC_X86_INS_PFACC = 524 - let UC_X86_INS_PFADD = 525 - let UC_X86_INS_PFCMPEQ = 526 - let UC_X86_INS_PFCMPGE = 527 - let UC_X86_INS_PFCMPGT = 528 - let UC_X86_INS_PFMAX = 529 - let UC_X86_INS_PFMIN = 530 - let UC_X86_INS_PFMUL = 531 - let UC_X86_INS_PFNACC = 532 - let UC_X86_INS_PFPNACC = 533 - let UC_X86_INS_PFRCPIT1 = 534 - let UC_X86_INS_PFRCPIT2 = 535 - let UC_X86_INS_PFRCP = 536 - let UC_X86_INS_PFRSQIT1 = 537 - let UC_X86_INS_PFRSQRT = 538 - let UC_X86_INS_PFSUBR = 539 - let UC_X86_INS_PFSUB = 540 - let UC_X86_INS_PHMINPOSUW = 541 - let UC_X86_INS_PI2FD = 542 - let UC_X86_INS_PI2FW = 543 - let UC_X86_INS_PINSRB = 544 - let UC_X86_INS_PINSRD = 545 - let UC_X86_INS_PINSRQ = 546 - let UC_X86_INS_PMAXSB = 547 - let UC_X86_INS_PMAXSD = 548 - let UC_X86_INS_PMAXUD = 549 - let UC_X86_INS_PMAXUW = 550 - let UC_X86_INS_PMINSB = 551 - let UC_X86_INS_PMINSD = 552 - let UC_X86_INS_PMINUD = 553 - let UC_X86_INS_PMINUW = 554 - let UC_X86_INS_PMOVSXBD = 555 - let UC_X86_INS_PMOVSXBQ = 556 - let UC_X86_INS_PMOVSXBW = 557 - let UC_X86_INS_PMOVSXDQ = 558 - let UC_X86_INS_PMOVSXWD = 559 - let UC_X86_INS_PMOVSXWQ = 560 - let UC_X86_INS_PMOVZXBD = 561 - let UC_X86_INS_PMOVZXBQ = 562 - let UC_X86_INS_PMOVZXBW = 563 - let UC_X86_INS_PMOVZXDQ = 564 - let UC_X86_INS_PMOVZXWD = 565 - let UC_X86_INS_PMOVZXWQ = 566 - let UC_X86_INS_PMULDQ = 567 - let UC_X86_INS_PMULHRW = 568 - let UC_X86_INS_PMULLD = 569 - let UC_X86_INS_POP = 570 - let UC_X86_INS_POPAW = 571 - let UC_X86_INS_POPAL = 572 - let UC_X86_INS_POPCNT = 573 - let UC_X86_INS_POPF = 574 - let UC_X86_INS_POPFD = 575 - let UC_X86_INS_POPFQ = 576 - let UC_X86_INS_PREFETCH = 577 - let UC_X86_INS_PREFETCHNTA = 578 - let UC_X86_INS_PREFETCHT0 = 579 - let UC_X86_INS_PREFETCHT1 = 580 - let UC_X86_INS_PREFETCHT2 = 581 - let UC_X86_INS_PREFETCHW = 582 - let UC_X86_INS_PSHUFD = 583 - let UC_X86_INS_PSHUFHW = 584 - let UC_X86_INS_PSHUFLW = 585 - let UC_X86_INS_PSLLDQ = 586 - let UC_X86_INS_PSRLDQ = 587 - let UC_X86_INS_PSWAPD = 588 - let UC_X86_INS_PTEST = 589 - let UC_X86_INS_PUNPCKHQDQ = 590 - let UC_X86_INS_PUNPCKLQDQ = 591 - let UC_X86_INS_PUSH = 592 - let UC_X86_INS_PUSHAW = 593 - let UC_X86_INS_PUSHAL = 594 - let UC_X86_INS_PUSHF = 595 - let UC_X86_INS_PUSHFD = 596 - let UC_X86_INS_PUSHFQ = 597 - let UC_X86_INS_RCL = 598 - let UC_X86_INS_RCPPS = 599 - let UC_X86_INS_RCPSS = 600 - let UC_X86_INS_RCR = 601 - let UC_X86_INS_RDFSBASE = 602 - let UC_X86_INS_RDGSBASE = 603 - let UC_X86_INS_RDMSR = 604 - let UC_X86_INS_RDPMC = 605 - let UC_X86_INS_RDRAND = 606 - let UC_X86_INS_RDSEED = 607 - let UC_X86_INS_RDTSC = 608 - let UC_X86_INS_RDTSCP = 609 - let UC_X86_INS_ROL = 610 - let UC_X86_INS_ROR = 611 - let UC_X86_INS_RORX = 612 - let UC_X86_INS_ROUNDPD = 613 - let UC_X86_INS_ROUNDPS = 614 - let UC_X86_INS_ROUNDSD = 615 - let UC_X86_INS_ROUNDSS = 616 - let UC_X86_INS_RSM = 617 - let UC_X86_INS_RSQRTPS = 618 - let UC_X86_INS_RSQRTSS = 619 - let UC_X86_INS_SAHF = 620 - let UC_X86_INS_SAL = 621 - let UC_X86_INS_SALC = 622 - let UC_X86_INS_SAR = 623 - let UC_X86_INS_SARX = 624 - let UC_X86_INS_SBB = 625 - let UC_X86_INS_SCASB = 626 - let UC_X86_INS_SCASD = 627 - let UC_X86_INS_SCASQ = 628 - let UC_X86_INS_SCASW = 629 - let UC_X86_INS_SETAE = 630 - let UC_X86_INS_SETA = 631 - let UC_X86_INS_SETBE = 632 - let UC_X86_INS_SETB = 633 - let UC_X86_INS_SETE = 634 - let UC_X86_INS_SETGE = 635 - let UC_X86_INS_SETG = 636 - let UC_X86_INS_SETLE = 637 - let UC_X86_INS_SETL = 638 - let UC_X86_INS_SETNE = 639 - let UC_X86_INS_SETNO = 640 - let UC_X86_INS_SETNP = 641 - let UC_X86_INS_SETNS = 642 - let UC_X86_INS_SETO = 643 - let UC_X86_INS_SETP = 644 - let UC_X86_INS_SETS = 645 - let UC_X86_INS_SFENCE = 646 - let UC_X86_INS_SGDT = 647 - let UC_X86_INS_SHA1MSG1 = 648 - let UC_X86_INS_SHA1MSG2 = 649 - let UC_X86_INS_SHA1NEXTE = 650 - let UC_X86_INS_SHA1RNDS4 = 651 - let UC_X86_INS_SHA256MSG1 = 652 - let UC_X86_INS_SHA256MSG2 = 653 - let UC_X86_INS_SHA256RNDS2 = 654 - let UC_X86_INS_SHL = 655 - let UC_X86_INS_SHLD = 656 - let UC_X86_INS_SHLX = 657 - let UC_X86_INS_SHR = 658 - let UC_X86_INS_SHRD = 659 - let UC_X86_INS_SHRX = 660 - let UC_X86_INS_SHUFPD = 661 - let UC_X86_INS_SHUFPS = 662 - let UC_X86_INS_SIDT = 663 - let UC_X86_INS_FSIN = 664 - let UC_X86_INS_SKINIT = 665 - let UC_X86_INS_SLDT = 666 - let UC_X86_INS_SMSW = 667 - let UC_X86_INS_SQRTPD = 668 - let UC_X86_INS_SQRTPS = 669 - let UC_X86_INS_SQRTSD = 670 - let UC_X86_INS_SQRTSS = 671 - let UC_X86_INS_FSQRT = 672 - let UC_X86_INS_STAC = 673 - let UC_X86_INS_STC = 674 - let UC_X86_INS_STD = 675 - let UC_X86_INS_STGI = 676 - let UC_X86_INS_STI = 677 - let UC_X86_INS_STMXCSR = 678 - let UC_X86_INS_STOSB = 679 - let UC_X86_INS_STOSD = 680 - let UC_X86_INS_STOSQ = 681 - let UC_X86_INS_STOSW = 682 - let UC_X86_INS_STR = 683 - let UC_X86_INS_FST = 684 - let UC_X86_INS_FSTP = 685 - let UC_X86_INS_FSTPNCE = 686 - let UC_X86_INS_FXCH = 687 - let UC_X86_INS_SUBPD = 688 - let UC_X86_INS_SUBPS = 689 - let UC_X86_INS_FSUBR = 690 - let UC_X86_INS_FISUBR = 691 - let UC_X86_INS_FSUBRP = 692 - let UC_X86_INS_SUBSD = 693 - let UC_X86_INS_SUBSS = 694 - let UC_X86_INS_FSUB = 695 - let UC_X86_INS_FISUB = 696 - let UC_X86_INS_FSUBP = 697 - let UC_X86_INS_SWAPGS = 698 - let UC_X86_INS_SYSCALL = 699 - let UC_X86_INS_SYSENTER = 700 - let UC_X86_INS_SYSEXIT = 701 - let UC_X86_INS_SYSRET = 702 - let UC_X86_INS_T1MSKC = 703 - let UC_X86_INS_TEST = 704 - let UC_X86_INS_UD2 = 705 - let UC_X86_INS_FTST = 706 - let UC_X86_INS_TZCNT = 707 - let UC_X86_INS_TZMSK = 708 - let UC_X86_INS_FUCOMPI = 709 - let UC_X86_INS_FUCOMI = 710 - let UC_X86_INS_FUCOMPP = 711 - let UC_X86_INS_FUCOMP = 712 - let UC_X86_INS_FUCOM = 713 - let UC_X86_INS_UD2B = 714 - let UC_X86_INS_UNPCKHPD = 715 - let UC_X86_INS_UNPCKHPS = 716 - let UC_X86_INS_UNPCKLPD = 717 - let UC_X86_INS_UNPCKLPS = 718 - let UC_X86_INS_VADDPD = 719 - let UC_X86_INS_VADDPS = 720 - let UC_X86_INS_VADDSD = 721 - let UC_X86_INS_VADDSS = 722 - let UC_X86_INS_VADDSUBPD = 723 - let UC_X86_INS_VADDSUBPS = 724 - let UC_X86_INS_VAESDECLAST = 725 - let UC_X86_INS_VAESDEC = 726 - let UC_X86_INS_VAESENCLAST = 727 - let UC_X86_INS_VAESENC = 728 - let UC_X86_INS_VAESIMC = 729 - let UC_X86_INS_VAESKEYGENASSIST = 730 - let UC_X86_INS_VALIGND = 731 - let UC_X86_INS_VALIGNQ = 732 - let UC_X86_INS_VANDNPD = 733 - let UC_X86_INS_VANDNPS = 734 - let UC_X86_INS_VANDPD = 735 - let UC_X86_INS_VANDPS = 736 - let UC_X86_INS_VBLENDMPD = 737 - let UC_X86_INS_VBLENDMPS = 738 - let UC_X86_INS_VBLENDPD = 739 - let UC_X86_INS_VBLENDPS = 740 - let UC_X86_INS_VBLENDVPD = 741 - let UC_X86_INS_VBLENDVPS = 742 - let UC_X86_INS_VBROADCASTF128 = 743 - let UC_X86_INS_VBROADCASTI32X4 = 744 - let UC_X86_INS_VBROADCASTI64X4 = 745 - let UC_X86_INS_VBROADCASTSD = 746 - let UC_X86_INS_VBROADCASTSS = 747 - let UC_X86_INS_VCMPPD = 748 - let UC_X86_INS_VCMPPS = 749 - let UC_X86_INS_VCMPSD = 750 - let UC_X86_INS_VCMPSS = 751 - let UC_X86_INS_VCOMPRESSPD = 752 - let UC_X86_INS_VCOMPRESSPS = 753 - let UC_X86_INS_VCVTDQ2PD = 754 - let UC_X86_INS_VCVTDQ2PS = 755 - let UC_X86_INS_VCVTPD2DQX = 756 - let UC_X86_INS_VCVTPD2DQ = 757 - let UC_X86_INS_VCVTPD2PSX = 758 - let UC_X86_INS_VCVTPD2PS = 759 - let UC_X86_INS_VCVTPD2UDQ = 760 - let UC_X86_INS_VCVTPH2PS = 761 - let UC_X86_INS_VCVTPS2DQ = 762 - let UC_X86_INS_VCVTPS2PD = 763 - let UC_X86_INS_VCVTPS2PH = 764 - let UC_X86_INS_VCVTPS2UDQ = 765 - let UC_X86_INS_VCVTSD2SI = 766 - let UC_X86_INS_VCVTSD2USI = 767 - let UC_X86_INS_VCVTSS2SI = 768 - let UC_X86_INS_VCVTSS2USI = 769 - let UC_X86_INS_VCVTTPD2DQX = 770 - let UC_X86_INS_VCVTTPD2DQ = 771 - let UC_X86_INS_VCVTTPD2UDQ = 772 - let UC_X86_INS_VCVTTPS2DQ = 773 - let UC_X86_INS_VCVTTPS2UDQ = 774 - let UC_X86_INS_VCVTUDQ2PD = 775 - let UC_X86_INS_VCVTUDQ2PS = 776 - let UC_X86_INS_VDIVPD = 777 - let UC_X86_INS_VDIVPS = 778 - let UC_X86_INS_VDIVSD = 779 - let UC_X86_INS_VDIVSS = 780 - let UC_X86_INS_VDPPD = 781 - let UC_X86_INS_VDPPS = 782 - let UC_X86_INS_VERR = 783 - let UC_X86_INS_VERW = 784 - let UC_X86_INS_VEXP2PD = 785 - let UC_X86_INS_VEXP2PS = 786 - let UC_X86_INS_VEXPANDPD = 787 - let UC_X86_INS_VEXPANDPS = 788 - let UC_X86_INS_VEXTRACTF128 = 789 - let UC_X86_INS_VEXTRACTF32X4 = 790 - let UC_X86_INS_VEXTRACTF64X4 = 791 - let UC_X86_INS_VEXTRACTI128 = 792 - let UC_X86_INS_VEXTRACTI32X4 = 793 - let UC_X86_INS_VEXTRACTI64X4 = 794 - let UC_X86_INS_VEXTRACTPS = 795 - let UC_X86_INS_VFMADD132PD = 796 - let UC_X86_INS_VFMADD132PS = 797 - let UC_X86_INS_VFMADDPD = 798 - let UC_X86_INS_VFMADD213PD = 799 - let UC_X86_INS_VFMADD231PD = 800 - let UC_X86_INS_VFMADDPS = 801 - let UC_X86_INS_VFMADD213PS = 802 - let UC_X86_INS_VFMADD231PS = 803 - let UC_X86_INS_VFMADDSD = 804 - let UC_X86_INS_VFMADD213SD = 805 - let UC_X86_INS_VFMADD132SD = 806 - let UC_X86_INS_VFMADD231SD = 807 - let UC_X86_INS_VFMADDSS = 808 - let UC_X86_INS_VFMADD213SS = 809 - let UC_X86_INS_VFMADD132SS = 810 - let UC_X86_INS_VFMADD231SS = 811 - let UC_X86_INS_VFMADDSUB132PD = 812 - let UC_X86_INS_VFMADDSUB132PS = 813 - let UC_X86_INS_VFMADDSUBPD = 814 - let UC_X86_INS_VFMADDSUB213PD = 815 - let UC_X86_INS_VFMADDSUB231PD = 816 - let UC_X86_INS_VFMADDSUBPS = 817 - let UC_X86_INS_VFMADDSUB213PS = 818 - let UC_X86_INS_VFMADDSUB231PS = 819 - let UC_X86_INS_VFMSUB132PD = 820 - let UC_X86_INS_VFMSUB132PS = 821 - let UC_X86_INS_VFMSUBADD132PD = 822 - let UC_X86_INS_VFMSUBADD132PS = 823 - let UC_X86_INS_VFMSUBADDPD = 824 - let UC_X86_INS_VFMSUBADD213PD = 825 - let UC_X86_INS_VFMSUBADD231PD = 826 - let UC_X86_INS_VFMSUBADDPS = 827 - let UC_X86_INS_VFMSUBADD213PS = 828 - let UC_X86_INS_VFMSUBADD231PS = 829 - let UC_X86_INS_VFMSUBPD = 830 - let UC_X86_INS_VFMSUB213PD = 831 - let UC_X86_INS_VFMSUB231PD = 832 - let UC_X86_INS_VFMSUBPS = 833 - let UC_X86_INS_VFMSUB213PS = 834 - let UC_X86_INS_VFMSUB231PS = 835 - let UC_X86_INS_VFMSUBSD = 836 - let UC_X86_INS_VFMSUB213SD = 837 - let UC_X86_INS_VFMSUB132SD = 838 - let UC_X86_INS_VFMSUB231SD = 839 - let UC_X86_INS_VFMSUBSS = 840 - let UC_X86_INS_VFMSUB213SS = 841 - let UC_X86_INS_VFMSUB132SS = 842 - let UC_X86_INS_VFMSUB231SS = 843 - let UC_X86_INS_VFNMADD132PD = 844 - let UC_X86_INS_VFNMADD132PS = 845 - let UC_X86_INS_VFNMADDPD = 846 - let UC_X86_INS_VFNMADD213PD = 847 - let UC_X86_INS_VFNMADD231PD = 848 - let UC_X86_INS_VFNMADDPS = 849 - let UC_X86_INS_VFNMADD213PS = 850 - let UC_X86_INS_VFNMADD231PS = 851 - let UC_X86_INS_VFNMADDSD = 852 - let UC_X86_INS_VFNMADD213SD = 853 - let UC_X86_INS_VFNMADD132SD = 854 - let UC_X86_INS_VFNMADD231SD = 855 - let UC_X86_INS_VFNMADDSS = 856 - let UC_X86_INS_VFNMADD213SS = 857 - let UC_X86_INS_VFNMADD132SS = 858 - let UC_X86_INS_VFNMADD231SS = 859 - let UC_X86_INS_VFNMSUB132PD = 860 - let UC_X86_INS_VFNMSUB132PS = 861 - let UC_X86_INS_VFNMSUBPD = 862 - let UC_X86_INS_VFNMSUB213PD = 863 - let UC_X86_INS_VFNMSUB231PD = 864 - let UC_X86_INS_VFNMSUBPS = 865 - let UC_X86_INS_VFNMSUB213PS = 866 - let UC_X86_INS_VFNMSUB231PS = 867 - let UC_X86_INS_VFNMSUBSD = 868 - let UC_X86_INS_VFNMSUB213SD = 869 - let UC_X86_INS_VFNMSUB132SD = 870 - let UC_X86_INS_VFNMSUB231SD = 871 - let UC_X86_INS_VFNMSUBSS = 872 - let UC_X86_INS_VFNMSUB213SS = 873 - let UC_X86_INS_VFNMSUB132SS = 874 - let UC_X86_INS_VFNMSUB231SS = 875 - let UC_X86_INS_VFRCZPD = 876 - let UC_X86_INS_VFRCZPS = 877 - let UC_X86_INS_VFRCZSD = 878 - let UC_X86_INS_VFRCZSS = 879 - let UC_X86_INS_VORPD = 880 - let UC_X86_INS_VORPS = 881 - let UC_X86_INS_VXORPD = 882 - let UC_X86_INS_VXORPS = 883 - let UC_X86_INS_VGATHERDPD = 884 - let UC_X86_INS_VGATHERDPS = 885 - let UC_X86_INS_VGATHERPF0DPD = 886 - let UC_X86_INS_VGATHERPF0DPS = 887 - let UC_X86_INS_VGATHERPF0QPD = 888 - let UC_X86_INS_VGATHERPF0QPS = 889 - let UC_X86_INS_VGATHERPF1DPD = 890 - let UC_X86_INS_VGATHERPF1DPS = 891 - let UC_X86_INS_VGATHERPF1QPD = 892 - let UC_X86_INS_VGATHERPF1QPS = 893 - let UC_X86_INS_VGATHERQPD = 894 - let UC_X86_INS_VGATHERQPS = 895 - let UC_X86_INS_VHADDPD = 896 - let UC_X86_INS_VHADDPS = 897 - let UC_X86_INS_VHSUBPD = 898 - let UC_X86_INS_VHSUBPS = 899 - let UC_X86_INS_VINSERTF128 = 900 - let UC_X86_INS_VINSERTF32X4 = 901 - let UC_X86_INS_VINSERTF32X8 = 902 - let UC_X86_INS_VINSERTF64X2 = 903 - let UC_X86_INS_VINSERTF64X4 = 904 - let UC_X86_INS_VINSERTI128 = 905 - let UC_X86_INS_VINSERTI32X4 = 906 - let UC_X86_INS_VINSERTI32X8 = 907 - let UC_X86_INS_VINSERTI64X2 = 908 - let UC_X86_INS_VINSERTI64X4 = 909 - let UC_X86_INS_VINSERTPS = 910 - let UC_X86_INS_VLDDQU = 911 - let UC_X86_INS_VLDMXCSR = 912 - let UC_X86_INS_VMASKMOVDQU = 913 - let UC_X86_INS_VMASKMOVPD = 914 - let UC_X86_INS_VMASKMOVPS = 915 - let UC_X86_INS_VMAXPD = 916 - let UC_X86_INS_VMAXPS = 917 - let UC_X86_INS_VMAXSD = 918 - let UC_X86_INS_VMAXSS = 919 - let UC_X86_INS_VMCALL = 920 - let UC_X86_INS_VMCLEAR = 921 - let UC_X86_INS_VMFUNC = 922 - let UC_X86_INS_VMINPD = 923 - let UC_X86_INS_VMINPS = 924 - let UC_X86_INS_VMINSD = 925 - let UC_X86_INS_VMINSS = 926 - let UC_X86_INS_VMLAUNCH = 927 - let UC_X86_INS_VMLOAD = 928 - let UC_X86_INS_VMMCALL = 929 - let UC_X86_INS_VMOVQ = 930 - let UC_X86_INS_VMOVDDUP = 931 - let UC_X86_INS_VMOVD = 932 - let UC_X86_INS_VMOVDQA32 = 933 - let UC_X86_INS_VMOVDQA64 = 934 - let UC_X86_INS_VMOVDQA = 935 - let UC_X86_INS_VMOVDQU16 = 936 - let UC_X86_INS_VMOVDQU32 = 937 - let UC_X86_INS_VMOVDQU64 = 938 - let UC_X86_INS_VMOVDQU8 = 939 - let UC_X86_INS_VMOVDQU = 940 - let UC_X86_INS_VMOVHLPS = 941 - let UC_X86_INS_VMOVHPD = 942 - let UC_X86_INS_VMOVHPS = 943 - let UC_X86_INS_VMOVLHPS = 944 - let UC_X86_INS_VMOVLPD = 945 - let UC_X86_INS_VMOVLPS = 946 - let UC_X86_INS_VMOVMSKPD = 947 - let UC_X86_INS_VMOVMSKPS = 948 - let UC_X86_INS_VMOVNTDQA = 949 - let UC_X86_INS_VMOVNTDQ = 950 - let UC_X86_INS_VMOVNTPD = 951 - let UC_X86_INS_VMOVNTPS = 952 - let UC_X86_INS_VMOVSD = 953 - let UC_X86_INS_VMOVSHDUP = 954 - let UC_X86_INS_VMOVSLDUP = 955 - let UC_X86_INS_VMOVSS = 956 - let UC_X86_INS_VMOVUPD = 957 - let UC_X86_INS_VMOVUPS = 958 - let UC_X86_INS_VMPSADBW = 959 - let UC_X86_INS_VMPTRLD = 960 - let UC_X86_INS_VMPTRST = 961 - let UC_X86_INS_VMREAD = 962 - let UC_X86_INS_VMRESUME = 963 - let UC_X86_INS_VMRUN = 964 - let UC_X86_INS_VMSAVE = 965 - let UC_X86_INS_VMULPD = 966 - let UC_X86_INS_VMULPS = 967 - let UC_X86_INS_VMULSD = 968 - let UC_X86_INS_VMULSS = 969 - let UC_X86_INS_VMWRITE = 970 - let UC_X86_INS_VMXOFF = 971 - let UC_X86_INS_VMXON = 972 - let UC_X86_INS_VPABSB = 973 - let UC_X86_INS_VPABSD = 974 - let UC_X86_INS_VPABSQ = 975 - let UC_X86_INS_VPABSW = 976 - let UC_X86_INS_VPACKSSDW = 977 - let UC_X86_INS_VPACKSSWB = 978 - let UC_X86_INS_VPACKUSDW = 979 - let UC_X86_INS_VPACKUSWB = 980 - let UC_X86_INS_VPADDB = 981 - let UC_X86_INS_VPADDD = 982 - let UC_X86_INS_VPADDQ = 983 - let UC_X86_INS_VPADDSB = 984 - let UC_X86_INS_VPADDSW = 985 - let UC_X86_INS_VPADDUSB = 986 - let UC_X86_INS_VPADDUSW = 987 - let UC_X86_INS_VPADDW = 988 - let UC_X86_INS_VPALIGNR = 989 - let UC_X86_INS_VPANDD = 990 - let UC_X86_INS_VPANDND = 991 - let UC_X86_INS_VPANDNQ = 992 - let UC_X86_INS_VPANDN = 993 - let UC_X86_INS_VPANDQ = 994 - let UC_X86_INS_VPAND = 995 - let UC_X86_INS_VPAVGB = 996 - let UC_X86_INS_VPAVGW = 997 - let UC_X86_INS_VPBLENDD = 998 - let UC_X86_INS_VPBLENDMB = 999 - let UC_X86_INS_VPBLENDMD = 1000 - let UC_X86_INS_VPBLENDMQ = 1001 - let UC_X86_INS_VPBLENDMW = 1002 - let UC_X86_INS_VPBLENDVB = 1003 - let UC_X86_INS_VPBLENDW = 1004 - let UC_X86_INS_VPBROADCASTB = 1005 - let UC_X86_INS_VPBROADCASTD = 1006 - let UC_X86_INS_VPBROADCASTMB2Q = 1007 - let UC_X86_INS_VPBROADCASTMW2D = 1008 - let UC_X86_INS_VPBROADCASTQ = 1009 - let UC_X86_INS_VPBROADCASTW = 1010 - let UC_X86_INS_VPCLMULQDQ = 1011 - let UC_X86_INS_VPCMOV = 1012 - let UC_X86_INS_VPCMPB = 1013 - let UC_X86_INS_VPCMPD = 1014 - let UC_X86_INS_VPCMPEQB = 1015 - let UC_X86_INS_VPCMPEQD = 1016 - let UC_X86_INS_VPCMPEQQ = 1017 - let UC_X86_INS_VPCMPEQW = 1018 - let UC_X86_INS_VPCMPESTRI = 1019 - let UC_X86_INS_VPCMPESTRM = 1020 - let UC_X86_INS_VPCMPGTB = 1021 - let UC_X86_INS_VPCMPGTD = 1022 - let UC_X86_INS_VPCMPGTQ = 1023 - let UC_X86_INS_VPCMPGTW = 1024 - let UC_X86_INS_VPCMPISTRI = 1025 - let UC_X86_INS_VPCMPISTRM = 1026 - let UC_X86_INS_VPCMPQ = 1027 - let UC_X86_INS_VPCMPUB = 1028 - let UC_X86_INS_VPCMPUD = 1029 - let UC_X86_INS_VPCMPUQ = 1030 - let UC_X86_INS_VPCMPUW = 1031 - let UC_X86_INS_VPCMPW = 1032 - let UC_X86_INS_VPCOMB = 1033 - let UC_X86_INS_VPCOMD = 1034 - let UC_X86_INS_VPCOMPRESSD = 1035 - let UC_X86_INS_VPCOMPRESSQ = 1036 - let UC_X86_INS_VPCOMQ = 1037 - let UC_X86_INS_VPCOMUB = 1038 - let UC_X86_INS_VPCOMUD = 1039 - let UC_X86_INS_VPCOMUQ = 1040 - let UC_X86_INS_VPCOMUW = 1041 - let UC_X86_INS_VPCOMW = 1042 - let UC_X86_INS_VPCONFLICTD = 1043 - let UC_X86_INS_VPCONFLICTQ = 1044 - let UC_X86_INS_VPERM2F128 = 1045 - let UC_X86_INS_VPERM2I128 = 1046 - let UC_X86_INS_VPERMD = 1047 - let UC_X86_INS_VPERMI2D = 1048 - let UC_X86_INS_VPERMI2PD = 1049 - let UC_X86_INS_VPERMI2PS = 1050 - let UC_X86_INS_VPERMI2Q = 1051 - let UC_X86_INS_VPERMIL2PD = 1052 - let UC_X86_INS_VPERMIL2PS = 1053 - let UC_X86_INS_VPERMILPD = 1054 - let UC_X86_INS_VPERMILPS = 1055 - let UC_X86_INS_VPERMPD = 1056 - let UC_X86_INS_VPERMPS = 1057 - let UC_X86_INS_VPERMQ = 1058 - let UC_X86_INS_VPERMT2D = 1059 - let UC_X86_INS_VPERMT2PD = 1060 - let UC_X86_INS_VPERMT2PS = 1061 - let UC_X86_INS_VPERMT2Q = 1062 - let UC_X86_INS_VPEXPANDD = 1063 - let UC_X86_INS_VPEXPANDQ = 1064 - let UC_X86_INS_VPEXTRB = 1065 - let UC_X86_INS_VPEXTRD = 1066 - let UC_X86_INS_VPEXTRQ = 1067 - let UC_X86_INS_VPEXTRW = 1068 - let UC_X86_INS_VPGATHERDD = 1069 - let UC_X86_INS_VPGATHERDQ = 1070 - let UC_X86_INS_VPGATHERQD = 1071 - let UC_X86_INS_VPGATHERQQ = 1072 - let UC_X86_INS_VPHADDBD = 1073 - let UC_X86_INS_VPHADDBQ = 1074 - let UC_X86_INS_VPHADDBW = 1075 - let UC_X86_INS_VPHADDDQ = 1076 - let UC_X86_INS_VPHADDD = 1077 - let UC_X86_INS_VPHADDSW = 1078 - let UC_X86_INS_VPHADDUBD = 1079 - let UC_X86_INS_VPHADDUBQ = 1080 - let UC_X86_INS_VPHADDUBW = 1081 - let UC_X86_INS_VPHADDUDQ = 1082 - let UC_X86_INS_VPHADDUWD = 1083 - let UC_X86_INS_VPHADDUWQ = 1084 - let UC_X86_INS_VPHADDWD = 1085 - let UC_X86_INS_VPHADDWQ = 1086 - let UC_X86_INS_VPHADDW = 1087 - let UC_X86_INS_VPHMINPOSUW = 1088 - let UC_X86_INS_VPHSUBBW = 1089 - let UC_X86_INS_VPHSUBDQ = 1090 - let UC_X86_INS_VPHSUBD = 1091 - let UC_X86_INS_VPHSUBSW = 1092 - let UC_X86_INS_VPHSUBWD = 1093 - let UC_X86_INS_VPHSUBW = 1094 - let UC_X86_INS_VPINSRB = 1095 - let UC_X86_INS_VPINSRD = 1096 - let UC_X86_INS_VPINSRQ = 1097 - let UC_X86_INS_VPINSRW = 1098 - let UC_X86_INS_VPLZCNTD = 1099 - let UC_X86_INS_VPLZCNTQ = 1100 - let UC_X86_INS_VPMACSDD = 1101 - let UC_X86_INS_VPMACSDQH = 1102 - let UC_X86_INS_VPMACSDQL = 1103 - let UC_X86_INS_VPMACSSDD = 1104 - let UC_X86_INS_VPMACSSDQH = 1105 - let UC_X86_INS_VPMACSSDQL = 1106 - let UC_X86_INS_VPMACSSWD = 1107 - let UC_X86_INS_VPMACSSWW = 1108 - let UC_X86_INS_VPMACSWD = 1109 - let UC_X86_INS_VPMACSWW = 1110 - let UC_X86_INS_VPMADCSSWD = 1111 - let UC_X86_INS_VPMADCSWD = 1112 - let UC_X86_INS_VPMADDUBSW = 1113 - let UC_X86_INS_VPMADDWD = 1114 - let UC_X86_INS_VPMASKMOVD = 1115 - let UC_X86_INS_VPMASKMOVQ = 1116 - let UC_X86_INS_VPMAXSB = 1117 - let UC_X86_INS_VPMAXSD = 1118 - let UC_X86_INS_VPMAXSQ = 1119 - let UC_X86_INS_VPMAXSW = 1120 - let UC_X86_INS_VPMAXUB = 1121 - let UC_X86_INS_VPMAXUD = 1122 - let UC_X86_INS_VPMAXUQ = 1123 - let UC_X86_INS_VPMAXUW = 1124 - let UC_X86_INS_VPMINSB = 1125 - let UC_X86_INS_VPMINSD = 1126 - let UC_X86_INS_VPMINSQ = 1127 - let UC_X86_INS_VPMINSW = 1128 - let UC_X86_INS_VPMINUB = 1129 - let UC_X86_INS_VPMINUD = 1130 - let UC_X86_INS_VPMINUQ = 1131 - let UC_X86_INS_VPMINUW = 1132 - let UC_X86_INS_VPMOVDB = 1133 - let UC_X86_INS_VPMOVDW = 1134 - let UC_X86_INS_VPMOVM2B = 1135 - let UC_X86_INS_VPMOVM2D = 1136 - let UC_X86_INS_VPMOVM2Q = 1137 - let UC_X86_INS_VPMOVM2W = 1138 - let UC_X86_INS_VPMOVMSKB = 1139 - let UC_X86_INS_VPMOVQB = 1140 - let UC_X86_INS_VPMOVQD = 1141 - let UC_X86_INS_VPMOVQW = 1142 - let UC_X86_INS_VPMOVSDB = 1143 - let UC_X86_INS_VPMOVSDW = 1144 - let UC_X86_INS_VPMOVSQB = 1145 - let UC_X86_INS_VPMOVSQD = 1146 - let UC_X86_INS_VPMOVSQW = 1147 - let UC_X86_INS_VPMOVSXBD = 1148 - let UC_X86_INS_VPMOVSXBQ = 1149 - let UC_X86_INS_VPMOVSXBW = 1150 - let UC_X86_INS_VPMOVSXDQ = 1151 - let UC_X86_INS_VPMOVSXWD = 1152 - let UC_X86_INS_VPMOVSXWQ = 1153 - let UC_X86_INS_VPMOVUSDB = 1154 - let UC_X86_INS_VPMOVUSDW = 1155 - let UC_X86_INS_VPMOVUSQB = 1156 - let UC_X86_INS_VPMOVUSQD = 1157 - let UC_X86_INS_VPMOVUSQW = 1158 - let UC_X86_INS_VPMOVZXBD = 1159 - let UC_X86_INS_VPMOVZXBQ = 1160 - let UC_X86_INS_VPMOVZXBW = 1161 - let UC_X86_INS_VPMOVZXDQ = 1162 - let UC_X86_INS_VPMOVZXWD = 1163 - let UC_X86_INS_VPMOVZXWQ = 1164 - let UC_X86_INS_VPMULDQ = 1165 - let UC_X86_INS_VPMULHRSW = 1166 - let UC_X86_INS_VPMULHUW = 1167 - let UC_X86_INS_VPMULHW = 1168 - let UC_X86_INS_VPMULLD = 1169 - let UC_X86_INS_VPMULLQ = 1170 - let UC_X86_INS_VPMULLW = 1171 - let UC_X86_INS_VPMULUDQ = 1172 - let UC_X86_INS_VPORD = 1173 - let UC_X86_INS_VPORQ = 1174 - let UC_X86_INS_VPOR = 1175 - let UC_X86_INS_VPPERM = 1176 - let UC_X86_INS_VPROTB = 1177 - let UC_X86_INS_VPROTD = 1178 - let UC_X86_INS_VPROTQ = 1179 - let UC_X86_INS_VPROTW = 1180 - let UC_X86_INS_VPSADBW = 1181 - let UC_X86_INS_VPSCATTERDD = 1182 - let UC_X86_INS_VPSCATTERDQ = 1183 - let UC_X86_INS_VPSCATTERQD = 1184 - let UC_X86_INS_VPSCATTERQQ = 1185 - let UC_X86_INS_VPSHAB = 1186 - let UC_X86_INS_VPSHAD = 1187 - let UC_X86_INS_VPSHAQ = 1188 - let UC_X86_INS_VPSHAW = 1189 - let UC_X86_INS_VPSHLB = 1190 - let UC_X86_INS_VPSHLD = 1191 - let UC_X86_INS_VPSHLQ = 1192 - let UC_X86_INS_VPSHLW = 1193 - let UC_X86_INS_VPSHUFB = 1194 - let UC_X86_INS_VPSHUFD = 1195 - let UC_X86_INS_VPSHUFHW = 1196 - let UC_X86_INS_VPSHUFLW = 1197 - let UC_X86_INS_VPSIGNB = 1198 - let UC_X86_INS_VPSIGND = 1199 - let UC_X86_INS_VPSIGNW = 1200 - let UC_X86_INS_VPSLLDQ = 1201 - let UC_X86_INS_VPSLLD = 1202 - let UC_X86_INS_VPSLLQ = 1203 - let UC_X86_INS_VPSLLVD = 1204 - let UC_X86_INS_VPSLLVQ = 1205 - let UC_X86_INS_VPSLLW = 1206 - let UC_X86_INS_VPSRAD = 1207 - let UC_X86_INS_VPSRAQ = 1208 - let UC_X86_INS_VPSRAVD = 1209 - let UC_X86_INS_VPSRAVQ = 1210 - let UC_X86_INS_VPSRAW = 1211 - let UC_X86_INS_VPSRLDQ = 1212 - let UC_X86_INS_VPSRLD = 1213 - let UC_X86_INS_VPSRLQ = 1214 - let UC_X86_INS_VPSRLVD = 1215 - let UC_X86_INS_VPSRLVQ = 1216 - let UC_X86_INS_VPSRLW = 1217 - let UC_X86_INS_VPSUBB = 1218 - let UC_X86_INS_VPSUBD = 1219 - let UC_X86_INS_VPSUBQ = 1220 - let UC_X86_INS_VPSUBSB = 1221 - let UC_X86_INS_VPSUBSW = 1222 - let UC_X86_INS_VPSUBUSB = 1223 - let UC_X86_INS_VPSUBUSW = 1224 - let UC_X86_INS_VPSUBW = 1225 - let UC_X86_INS_VPTESTMD = 1226 - let UC_X86_INS_VPTESTMQ = 1227 - let UC_X86_INS_VPTESTNMD = 1228 - let UC_X86_INS_VPTESTNMQ = 1229 - let UC_X86_INS_VPTEST = 1230 - let UC_X86_INS_VPUNPCKHBW = 1231 - let UC_X86_INS_VPUNPCKHDQ = 1232 - let UC_X86_INS_VPUNPCKHQDQ = 1233 - let UC_X86_INS_VPUNPCKHWD = 1234 - let UC_X86_INS_VPUNPCKLBW = 1235 - let UC_X86_INS_VPUNPCKLDQ = 1236 - let UC_X86_INS_VPUNPCKLQDQ = 1237 - let UC_X86_INS_VPUNPCKLWD = 1238 - let UC_X86_INS_VPXORD = 1239 - let UC_X86_INS_VPXORQ = 1240 - let UC_X86_INS_VPXOR = 1241 - let UC_X86_INS_VRCP14PD = 1242 - let UC_X86_INS_VRCP14PS = 1243 - let UC_X86_INS_VRCP14SD = 1244 - let UC_X86_INS_VRCP14SS = 1245 - let UC_X86_INS_VRCP28PD = 1246 - let UC_X86_INS_VRCP28PS = 1247 - let UC_X86_INS_VRCP28SD = 1248 - let UC_X86_INS_VRCP28SS = 1249 - let UC_X86_INS_VRCPPS = 1250 - let UC_X86_INS_VRCPSS = 1251 - let UC_X86_INS_VRNDSCALEPD = 1252 - let UC_X86_INS_VRNDSCALEPS = 1253 - let UC_X86_INS_VRNDSCALESD = 1254 - let UC_X86_INS_VRNDSCALESS = 1255 - let UC_X86_INS_VROUNDPD = 1256 - let UC_X86_INS_VROUNDPS = 1257 - let UC_X86_INS_VROUNDSD = 1258 - let UC_X86_INS_VROUNDSS = 1259 - let UC_X86_INS_VRSQRT14PD = 1260 - let UC_X86_INS_VRSQRT14PS = 1261 - let UC_X86_INS_VRSQRT14SD = 1262 - let UC_X86_INS_VRSQRT14SS = 1263 - let UC_X86_INS_VRSQRT28PD = 1264 - let UC_X86_INS_VRSQRT28PS = 1265 - let UC_X86_INS_VRSQRT28SD = 1266 - let UC_X86_INS_VRSQRT28SS = 1267 - let UC_X86_INS_VRSQRTPS = 1268 - let UC_X86_INS_VRSQRTSS = 1269 - let UC_X86_INS_VSCATTERDPD = 1270 - let UC_X86_INS_VSCATTERDPS = 1271 - let UC_X86_INS_VSCATTERPF0DPD = 1272 - let UC_X86_INS_VSCATTERPF0DPS = 1273 - let UC_X86_INS_VSCATTERPF0QPD = 1274 - let UC_X86_INS_VSCATTERPF0QPS = 1275 - let UC_X86_INS_VSCATTERPF1DPD = 1276 - let UC_X86_INS_VSCATTERPF1DPS = 1277 - let UC_X86_INS_VSCATTERPF1QPD = 1278 - let UC_X86_INS_VSCATTERPF1QPS = 1279 - let UC_X86_INS_VSCATTERQPD = 1280 - let UC_X86_INS_VSCATTERQPS = 1281 - let UC_X86_INS_VSHUFPD = 1282 - let UC_X86_INS_VSHUFPS = 1283 - let UC_X86_INS_VSQRTPD = 1284 - let UC_X86_INS_VSQRTPS = 1285 - let UC_X86_INS_VSQRTSD = 1286 - let UC_X86_INS_VSQRTSS = 1287 - let UC_X86_INS_VSTMXCSR = 1288 - let UC_X86_INS_VSUBPD = 1289 - let UC_X86_INS_VSUBPS = 1290 - let UC_X86_INS_VSUBSD = 1291 - let UC_X86_INS_VSUBSS = 1292 - let UC_X86_INS_VTESTPD = 1293 - let UC_X86_INS_VTESTPS = 1294 - let UC_X86_INS_VUNPCKHPD = 1295 - let UC_X86_INS_VUNPCKHPS = 1296 - let UC_X86_INS_VUNPCKLPD = 1297 - let UC_X86_INS_VUNPCKLPS = 1298 - let UC_X86_INS_VZEROALL = 1299 - let UC_X86_INS_VZEROUPPER = 1300 - let UC_X86_INS_WAIT = 1301 - let UC_X86_INS_WBINVD = 1302 - let UC_X86_INS_WRFSBASE = 1303 - let UC_X86_INS_WRGSBASE = 1304 - let UC_X86_INS_WRMSR = 1305 - let UC_X86_INS_XABORT = 1306 - let UC_X86_INS_XACQUIRE = 1307 - let UC_X86_INS_XBEGIN = 1308 - let UC_X86_INS_XCHG = 1309 - let UC_X86_INS_XCRYPTCBC = 1310 - let UC_X86_INS_XCRYPTCFB = 1311 - let UC_X86_INS_XCRYPTCTR = 1312 - let UC_X86_INS_XCRYPTECB = 1313 - let UC_X86_INS_XCRYPTOFB = 1314 - let UC_X86_INS_XEND = 1315 - let UC_X86_INS_XGETBV = 1316 - let UC_X86_INS_XLATB = 1317 - let UC_X86_INS_XRELEASE = 1318 - let UC_X86_INS_XRSTOR = 1319 - let UC_X86_INS_XRSTOR64 = 1320 - let UC_X86_INS_XRSTORS = 1321 - let UC_X86_INS_XRSTORS64 = 1322 - let UC_X86_INS_XSAVE = 1323 - let UC_X86_INS_XSAVE64 = 1324 - let UC_X86_INS_XSAVEC = 1325 - let UC_X86_INS_XSAVEC64 = 1326 - let UC_X86_INS_XSAVEOPT = 1327 - let UC_X86_INS_XSAVEOPT64 = 1328 - let UC_X86_INS_XSAVES = 1329 - let UC_X86_INS_XSAVES64 = 1330 - let UC_X86_INS_XSETBV = 1331 - let UC_X86_INS_XSHA1 = 1332 - let UC_X86_INS_XSHA256 = 1333 - let UC_X86_INS_XSTORE = 1334 - let UC_X86_INS_XTEST = 1335 - let UC_X86_INS_FDISI8087_NOP = 1336 - let UC_X86_INS_FENI8087_NOP = 1337 - let UC_X86_INS_ENDING = 1338 - diff --git a/bindings/dotnet/Unicorn/Hooks.fs b/bindings/dotnet/Unicorn/Hooks.fs deleted file mode 100644 index a57ec759..00000000 --- a/bindings/dotnet/Unicorn/Hooks.fs +++ /dev/null @@ -1,53 +0,0 @@ -(* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*) - -namespace UnicornEngine - -open System -open System.Runtime.InteropServices - -// internal hooks to be passed to native Unicorn library -[] -type internal CodeHookInternal = delegate of IntPtr * UInt64 * Int32 * IntPtr -> unit - -[] -type internal BlockHookInternal = delegate of IntPtr * UInt64 * Int32 * IntPtr -> unit - -[] -type internal InterruptHookInternal = delegate of IntPtr * Int32 * IntPtr -> unit - -[] -type internal MemReadHookInternal = delegate of IntPtr * UInt64 * Int32 * IntPtr -> unit - -[] -type internal MemWriteHookInternal = delegate of IntPtr * UInt64 * Int32 * UInt64 * IntPtr -> unit - -[] -type internal EventMemHookInternal = delegate of IntPtr * UInt64 * Int32 * UInt64 * IntPtr -> unit - -[] -type internal InHookInternal = delegate of IntPtr * Int32 * Int32 * IntPtr -> unit - -[] -type internal OutHookInternal = delegate of IntPtr * Int32 * Int32 * Int32 * IntPtr -> unit - -[] -type internal SyscallHookInternal = delegate of IntPtr * IntPtr -> unit \ No newline at end of file diff --git a/bindings/dotnet/Unicorn/NativeUnicorn.fs b/bindings/dotnet/Unicorn/NativeUnicorn.fs deleted file mode 100644 index 930309ea..00000000 --- a/bindings/dotnet/Unicorn/NativeUnicorn.fs +++ /dev/null @@ -1,95 +0,0 @@ -(* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*) - -namespace UnicornEngine - -open System -open System.Runtime.InteropServices - -module NativeUnicornEngine = - - module private Imported = - - [] - extern Int32 uc_version(UIntPtr major, UIntPtr minor) - - [] - extern Int32 uc_open(UInt32 arch, UInt32 mode, UIntPtr[] engine) - - [] - extern Int32 uc_close(UIntPtr eng) - - [] - extern Int32 uc_mem_map(UIntPtr eng, UInt64 address, UIntPtr size, UInt32 perm) - - [] - extern Int32 uc_mem_write(UIntPtr eng, UInt64 address, Byte[] value, UIntPtr size) - - [] - extern Int32 uc_mem_read(UIntPtr eng, UInt64 address, Byte[] value, UIntPtr size) - - [] - extern Int32 uc_reg_write(UIntPtr eng, Int32 regId, Byte[] value) - - [] - extern Int32 uc_reg_read(UIntPtr eng, Int32 regId, Byte[] value) - - [] - extern Int32 uc_emu_start(UIntPtr eng, UInt64 beginAddr, UInt64 untilAddr, UInt64 timeout, UIntPtr count) - - [] - extern Int32 uc_emu_stop(UIntPtr eng) - - [] - extern Boolean uc_arch_supported(Int32 arch) - - [] - extern Int32 uc_errno(UIntPtr eng) - - [] - extern IntPtr uc_strerror(Int32 err) - - [] - extern Int32 uc_hook_add_noarg(UIntPtr eng, UIntPtr hh, Int32 callbackType, UIntPtr callback, IntPtr userData) - - [] - extern Int32 uc_hook_add_arg0(UIntPtr eng, UIntPtr hh, Int32 callbackType, UIntPtr callback, IntPtr userData, IntPtr arg0) - - [] - extern Int32 uc_hook_add_arg0_arg1(UIntPtr eng, UIntPtr hh, Int32 callbackType, UIntPtr callback, IntPtr userData, UInt64 arg0, UInt64 arg1) - - // by using a mutables variables it is easier to create testing code - let mutable version = fun(major, minor) -> Imported.uc_version(major, minor) - let mutable uc_open = fun(arch, mode, uc) -> Imported.uc_open(arch, mode, uc) - let mutable close = fun(eng) -> Imported.uc_close(eng) - let mutable mem_map = fun(eng, adress, size, perm) -> Imported.uc_mem_map(eng, adress, size, perm) - let mutable mem_write = fun(eng, adress, value, size) -> Imported.uc_mem_write(eng, adress, value, size) - let mutable mem_read = fun(eng, adress, value, size) -> Imported.uc_mem_read(eng, adress, value, size) - let mutable reg_write = fun(eng, regId, value) -> Imported.uc_reg_write(eng, regId, value) - let mutable reg_read = fun(eng, regId, value) -> Imported.uc_reg_read(eng, regId, value) - let mutable emu_start = fun(eng, beginAddr, untilAddr, timeout, count) -> Imported.uc_emu_start(eng, beginAddr, untilAddr, timeout, count) - let mutable emu_stop = fun(eng) -> Imported.uc_emu_stop(eng) - let mutable arch_supported = fun(arch) -> Imported.uc_arch_supported(arch) - let mutable errno = fun(eng) -> Imported.uc_errno(eng) - let mutable strerror = fun(err) -> Imported.uc_strerror(err) - let mutable hook_add_noarg = fun(eng, hh, callbackType, callback, userData) -> Imported.uc_hook_add_noarg(eng, hh, callbackType, callback, userData) - let mutable hook_add_arg0 = fun(eng, hh, callbackType, callback, userData, arg0) -> Imported.uc_hook_add_arg0(eng, hh, callbackType, callback, userData, arg0) - let mutable hook_add_arg0_arg1 = fun(eng, hh, callbackType, callback, userData, arg0, arg1) -> Imported.uc_hook_add_arg0_arg1(eng, hh, callbackType, callback, userData, arg0, arg1) \ No newline at end of file diff --git a/bindings/dotnet/Unicorn/Unicorn.fs b/bindings/dotnet/Unicorn/Unicorn.fs deleted file mode 100644 index 79108c1d..00000000 --- a/bindings/dotnet/Unicorn/Unicorn.fs +++ /dev/null @@ -1,277 +0,0 @@ -(* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*) - -namespace UnicornEngine - -open System -open System.Threading -open System.Collections.Generic -open System.Runtime.InteropServices -open UnicornEngine.Const - -// exported hooks -type CodeHook = delegate of Unicorn * UInt64 * Int32 * Object -> unit -and BlockHook = delegate of Unicorn * UInt64 * Int32 * Object -> unit -and InterruptHook = delegate of Unicorn * Int32 * Object -> unit -and MemReadHook = delegate of Unicorn * UInt64 * Int32 * Object -> unit -and MemWriteHook = delegate of Unicorn * UInt64 * Int32 * UInt64 * Object -> unit -and EventMemHook = delegate of Unicorn * UInt64 * Int32 * UInt64 * Object -> unit -and InHook = delegate of Unicorn * Int32 * Int32 * Object -> unit -and OutHook = delegate of Unicorn * Int32 * Int32 * Int32 * Object -> unit -and SyscallHook = delegate of Unicorn * Object -> unit - -// the managed unicorn engine -and Unicorn(arch: Int32, mode: Int32) = - - // hook callback list - let _codeHooks = new Dictionary() - let _blockHooks = new Dictionary() - let _interruptHooks = new Dictionary() - let _memReadHooks = new Dictionary() - let _memWriteHooks = new Dictionary() - let _memEventHooks = new Dictionary() - let _inHooks = new Dictionary() - let _outHooks = new Dictionary() - let _syscallHooks = new Dictionary() - - let mutable _eng = [|UIntPtr.Zero|] - - let checkResult(errCode: Int32, errMsg: String) = - if errCode <> Common.UC_ERR_OK then raise(ApplicationException(String.Format("{0}. Error: {1}", errMsg, errCode))) - - let getId = - let counter = ref 0 - fun () -> new IntPtr(Interlocked.Increment(counter)) - - let hookDel(callbacks: Dictionary) (callback: 'a)= - // TODO: invoke the native function in order to not call the trampoline anymore - callbacks.Keys - |> Seq.tryFind(fun k -> match callbacks.[k] with | (c, _) -> c = callback) - |> (fun k -> if k.IsSome then callbacks.Remove(k.Value) |> ignore) - - do - let mem = Marshal.AllocHGlobal(IntPtr.Size) - _eng <- [|new UIntPtr(mem.ToPointer())|] - let err = NativeUnicornEngine.uc_open(uint32 arch, uint32 mode, _eng) - checkResult(err, "Unable to open the Unicorn Engine") - - member private this.CheckResult(errorCode: Int32) = - // return the exception instead of raising it in order to have a more meaningful stack trace - if errorCode <> Common.UC_ERR_OK then - let errorMessage = this.StrError(errorCode) - Some <| UnicornEngineException(errorCode, errorMessage) - else None - - member this.MemMap(address: UInt64, size: UIntPtr, perm: Int32) = - match NativeUnicornEngine.mem_map(_eng.[0], address, size, uint32 perm) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.MemWrite(address: UInt64, value: Byte array) = - match NativeUnicornEngine.mem_write(_eng.[0], address, value, new UIntPtr(uint32 value.Length)) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.MemRead(address: UInt64, memValue: Byte array) = - match NativeUnicornEngine.mem_read(_eng.[0], address, memValue, new UIntPtr(uint32 memValue.Length)) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.RegWrite(regId: Int32, value: Byte array) = - match NativeUnicornEngine.reg_write(_eng.[0], regId, value) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.RegRead(regId: Int32, regValue: Byte array) = - match NativeUnicornEngine.reg_read(_eng.[0], regId, regValue) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.EmuStart(beginAddr: UInt64, untilAddr: UInt64, timeout: UInt64, count: UIntPtr) = - match NativeUnicornEngine.emu_start(_eng.[0], beginAddr, untilAddr, timeout, count) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.EmuStop() = - match NativeUnicornEngine.emu_stop(_eng.[0]) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.Close() = - match NativeUnicornEngine.close(_eng.[0]) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.ArchSupported(arch: Int32) = - NativeUnicornEngine.arch_supported(arch) - - member this.ErrNo() = - NativeUnicornEngine.errno(_eng.[0]) - - member this.StrError(errorNo: Int32) = - let errorStringPointer = NativeUnicornEngine.strerror(errorNo) - Marshal.PtrToStringAnsi(errorStringPointer) - - member this.AddCodeHook(callback: CodeHook, userData: Object, beginAdd: UInt64, endAddr: UInt64) = - let trampoline(u: IntPtr) (addr: UInt64) (size: Int32) (user: IntPtr) = - let (exist, (callback, userData)) = _codeHooks.TryGetValue(user) - if exist then callback.Invoke(this, addr, size, userData) - - let id = getId() - _codeHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new CodeHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0_arg1(_eng.[0], hh, Common.UC_HOOK_CODE, new UIntPtr(funcPointer.ToPointer()), id, beginAdd, endAddr) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.HookDel(callback: CodeHook) = - hookDel _codeHooks callback - - member this.AddBlockHook(callback: BlockHook, userData: Object, beginAdd: UInt64, endAddr: UInt64) = - let trampoline(u: IntPtr) (addr: UInt64) (size: Int32) (user: IntPtr) = - let (exist, (callback, userData)) = _blockHooks.TryGetValue(user) - if exist then callback.Invoke(this, addr, size, userData) - - let id = getId() - _blockHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new BlockHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0_arg1(_eng.[0], hh, Common.UC_HOOK_BLOCK, new UIntPtr(funcPointer.ToPointer()), id, beginAdd, endAddr) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.HookDel(callback: BlockHook) = - hookDel _blockHooks callback - - member this.AddInterruptHook(callback: InterruptHook, userData: Object) = - let trampoline(u: IntPtr) (intNumber: Int32) (user: IntPtr) = - let (exist, (callback, userData)) = _interruptHooks.TryGetValue(user) - if exist then callback.Invoke(this, intNumber, userData) - - let id = getId() - _interruptHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new InterruptHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_noarg(_eng.[0], hh, Common.UC_HOOK_INTR, new UIntPtr(funcPointer.ToPointer()), id) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.HookDel(callback: InterruptHook) = - hookDel _interruptHooks callback - - member this.AddMemReadHook(callback: MemReadHook, userData: Object, beginAdd: UInt64, endAddr: UInt64) = - let trampoline(u: IntPtr) (addr: UInt64) (size: Int32) (user: IntPtr) = - let (exist, (callback, userData)) = _memReadHooks.TryGetValue(user) - if exist then callback.Invoke(this, addr, size, userData) - - let id = getId() - _memReadHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new MemReadHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0_arg1(_eng.[0], hh, Common.UC_HOOK_MEM_READ, new UIntPtr(funcPointer.ToPointer()), id, beginAdd, endAddr) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.HookDel(callback: MemReadHook) = - hookDel _memReadHooks callback - - member this.AddMemWriteHook(callback: MemWriteHook, userData: Object, beginAdd: UInt64, endAddr: UInt64) = - let trampoline(u: IntPtr) (addr: UInt64) (size: Int32) (value: UInt64) (user: IntPtr) = - let (exist, (callback, userData)) = _memWriteHooks.TryGetValue(user) - if exist then callback.Invoke(this, addr, size, value, userData) - - let id = getId() - _memWriteHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new MemWriteHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0_arg1(_eng.[0], hh, Common.UC_HOOK_MEM_WRITE, new UIntPtr(funcPointer.ToPointer()), id, beginAdd, endAddr) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.HookDel(callback: MemWriteHook) = - hookDel _memWriteHooks callback - - member this.AddEventMemHook(callback: EventMemHook, eventType: Int32, userData: Object) = - let trampoline(u: IntPtr) (addr: UInt64) (size: Int32) (value: UInt64) (user: IntPtr) = - let (exist, (callback, userData)) = _memEventHooks.TryGetValue(user) - if exist then callback.Invoke(this, addr, size, value, userData) - - let registEventMemHook(check: Int32) = - let id = getId() - _memEventHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new EventMemHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_noarg(_eng.[0], hh, check, new UIntPtr(funcPointer.ToPointer()), id) |> this.CheckResult with - | Some e -> raise e | None -> () - - // test all the events types agains the input eventType - [ - Common.UC_HOOK_MEM_READ_UNMAPPED - Common.UC_HOOK_MEM_WRITE_UNMAPPED - Common.UC_HOOK_MEM_FETCH_UNMAPPED - Common.UC_HOOK_MEM_READ_PROT - Common.UC_HOOK_MEM_WRITE_PROT - Common.UC_HOOK_MEM_FETCH_PROT - ] - |> List.filter(fun eventFlag -> eventType &&& eventFlag <> 0) - |> List.map registEventMemHook - |> List.rev |> List.head - - member this.HookDel(callback: EventMemHook) = - hookDel _memEventHooks callback - - member this.AddInHook(callback: InHook, userData: Object) = - let trampoline(u: IntPtr) (port: Int32) (size: Int32) (user: IntPtr) = - let (exist, (callback, userData)) = _inHooks.TryGetValue(user) - if exist then callback.Invoke(this, port, size, userData) - - let id = getId() - _inHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new InHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0(_eng.[0], hh, Common.UC_HOOK_INSN, new UIntPtr(funcPointer.ToPointer()), id, new IntPtr(X86.UC_X86_INS_IN)) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.AddOutHook(callback: OutHook, userData: Object) = - let trampoline(u: IntPtr) (port: Int32) (size: Int32) (value: Int32) (user: IntPtr) = - let (exist, (callback, userData)) = _outHooks.TryGetValue(user) - if exist then callback.Invoke(this, port, size, value, userData) - - let id = getId() - _outHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new OutHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0(_eng.[0], hh, Common.UC_HOOK_INSN, new UIntPtr(funcPointer.ToPointer()), id, new IntPtr(X86.UC_X86_INS_OUT)) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.AddSyscallHook(callback: SyscallHook, userData: Object) = - let trampoline(u: IntPtr) (user: IntPtr) = - let (exist, (callback, userData)) = _syscallHooks.TryGetValue(user) - if exist then callback.Invoke(this, userData) - - let id = getId() - _syscallHooks.Add(id, (callback, userData)) - - let funcPointer = Marshal.GetFunctionPointerForDelegate(new SyscallHookInternal(trampoline)) - let hh = new UIntPtr(Marshal.AllocHGlobal(IntPtr.Size).ToPointer()) - match NativeUnicornEngine.hook_add_arg0(_eng.[0], hh, Common.UC_HOOK_INSN, new UIntPtr(funcPointer.ToPointer()), id, new IntPtr(X86.UC_X86_INS_SYSCALL)) |> this.CheckResult with - | Some e -> raise e | None -> () - - member this.Version() = - let (major, minor) = (new UIntPtr(), new UIntPtr()) - let combined = NativeUnicornEngine.version(major, minor) - (major.ToUInt32(), minor.ToUInt32(), combined) diff --git a/bindings/dotnet/Unicorn/UnicornEngineException.fs b/bindings/dotnet/Unicorn/UnicornEngineException.fs deleted file mode 100644 index 7b1cd845..00000000 --- a/bindings/dotnet/Unicorn/UnicornEngineException.fs +++ /dev/null @@ -1,30 +0,0 @@ -(* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*) - -namespace UnicornEngine - -open System - -type UnicornEngineException(errNo: Int32, msg: String) = - inherit ApplicationException(msg) - - member this.ErrorNo = errNo - diff --git a/bindings/dotnet/UnicornDotNet.sln b/bindings/dotnet/UnicornDotNet.sln new file mode 100644 index 00000000..90aa5b60 --- /dev/null +++ b/bindings/dotnet/UnicornDotNet.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnicornSamples", "UnicornSamples\UnicornSamples.csproj", "{B80B5987-1E24-4309-8BF9-C4F91270F21C}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "UnicornManaged", "UnicornManaged\UnicornManaged.fsproj", "{0C21F1C1-2725-4A46-9022-1905F85822A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B80B5987-1E24-4309-8BF9-C4F91270F21C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B80B5987-1E24-4309-8BF9-C4F91270F21C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B80B5987-1E24-4309-8BF9-C4F91270F21C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B80B5987-1E24-4309-8BF9-C4F91270F21C}.Release|Any CPU.Build.0 = Release|Any CPU + {0C21F1C1-2725-4A46-9022-1905F85822A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C21F1C1-2725-4A46-9022-1905F85822A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C21F1C1-2725-4A46-9022-1905F85822A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C21F1C1-2725-4A46-9022-1905F85822A5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/bindings/dotnet/UnicornManaged/AssemblyInfo.fs b/bindings/dotnet/UnicornManaged/AssemblyInfo.fs new file mode 100644 index 00000000..16d8c919 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/AssemblyInfo.fs @@ -0,0 +1,41 @@ +namespace UnicornManaged.AssemblyInfo + +open System.Reflection +open System.Runtime.CompilerServices +open System.Runtime.InteropServices + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[] +[] +[] +[] +[] +[] +[] +[] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [] +[] +[] + +do + () \ No newline at end of file diff --git a/bindings/dotnet/UnicornManaged/Binding/BindingFactory.fs b/bindings/dotnet/UnicornManaged/Binding/BindingFactory.fs new file mode 100644 index 00000000..f55f72ec --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Binding/BindingFactory.fs @@ -0,0 +1,13 @@ +namespace UnicornManaged.Binding + +open System + +module BindingFactory = + let mutable _instance = NativeBinding.instance + + let setDefaultBinding(binding: IBinding) = + _instance <- binding + + let getDefault() = + _instance + diff --git a/bindings/dotnet/UnicornManaged/Binding/IBinding.fs b/bindings/dotnet/UnicornManaged/Binding/IBinding.fs new file mode 100644 index 00000000..2ed038bc --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Binding/IBinding.fs @@ -0,0 +1,28 @@ +namespace UnicornManaged.Binding + +open System + +type IBinding = + interface + abstract Version : UIntPtr * UIntPtr -> Int32 + abstract ArchSupported : Int32 -> Boolean + abstract UcOpen : UInt32 * UInt32 * UIntPtr array -> Int32 + abstract Close : UIntPtr -> Int32 + abstract Strerror : Int32 -> IntPtr + abstract Errono : UIntPtr -> Int32 + abstract RegRead : UIntPtr * Int32 * Byte array -> Int32 + abstract RegWrite : UIntPtr * Int32 * Byte array -> Int32 + abstract MemRead : UIntPtr * UInt64 * Byte array * UIntPtr -> Int32 + abstract MemWrite : UIntPtr * UInt64 * Byte array * UIntPtr -> Int32 + abstract EmuStart : UIntPtr * UInt64 * UInt64 * UInt64 * UInt64 -> Int32 + abstract EmuStop : UIntPtr -> Int32 + abstract HookDel : UIntPtr * UIntPtr -> Int32 + abstract MemMap : UIntPtr * UInt64 * UIntPtr * UInt32 -> Int32 + abstract MemMapPtr : UIntPtr * UInt64 * UIntPtr * UInt32 * UIntPtr -> Int32 + abstract MemUnmap : UIntPtr * UInt64 * UIntPtr -> Int32 + abstract MemProtect : UIntPtr * UInt64 * UIntPtr * UInt32 -> Int32 + abstract HookAddNoarg : UIntPtr * UIntPtr * Int32 * UIntPtr * IntPtr -> Int32 + abstract HookAddArg0 : UIntPtr * UIntPtr * Int32 * UIntPtr * IntPtr * Int32 -> Int32 + abstract HookAddArg0Arg1 : UIntPtr * UIntPtr * Int32 * UIntPtr * IntPtr * UInt64 * UInt64 -> Int32 + end + diff --git a/bindings/dotnet/UnicornManaged/Binding/MockBinding.fs b/bindings/dotnet/UnicornManaged/Binding/MockBinding.fs new file mode 100644 index 00000000..fd651812 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Binding/MockBinding.fs @@ -0,0 +1,51 @@ +namespace UnicornManaged.Binding + +open System + +module internal MockBinding = + // by using a mutables variables it is easier to create testing code + let mutable version = fun(major, minor) -> 0 + let mutable uc_open = fun(arch, mode, uc) -> 0 + let mutable close = fun(eng) -> 0 + let mutable mem_map = fun(eng, adress, size, perm) -> 0 + let mutable mem_map_ptr = fun(eng, address, size, perms, ptr) -> 0 + let mutable mem_unmap = fun(eng, address, size) -> 0 + let mutable mem_protect = fun(eng, address, size, perms) -> 0 + let mutable mem_write = fun(eng, adress, value, size) -> 0 + let mutable mem_read = fun(eng, adress, value, size) -> 0 + let mutable reg_write = fun(eng, regId, value) -> 0 + let mutable reg_read = fun(eng, regId, value) -> 0 + let mutable emu_start = fun(eng, beginAddr, untilAddr, timeout, count) -> 0 + let mutable emu_stop = fun(eng) -> 0 + let mutable hook_del = fun(eng, hook) -> 0 + let mutable arch_supported = fun(arch) -> true + let mutable errno = fun(eng) -> 0 + let mutable strerror = fun(err) -> new nativeint(0) + let mutable hook_add_noarg = fun(eng, hh, callbackType, callback, userData) -> 0 + let mutable hook_add_arg0 = fun(eng, hh, callbackType, callback, userData, arg0) -> 0 + let mutable hook_add_arg0_arg1 = fun(eng, hh, callbackType, callback, userData, arg0, arg1) -> 0 + + let instance = + {new IBinding with + member thi.Version(major, minor) = version(major, minor) + member thi.UcOpen(arch, mode, uc) = uc_open(arch, mode, uc) + member thi.Close(eng) = close(eng) + member thi.MemMap(eng, adress, size, perm) = mem_map(eng, adress, size, perm) + member thi.MemWrite(eng, adress, value, size) = mem_write(eng, adress, value, size) + member thi.MemRead(eng, adress, value, size) = mem_read(eng, adress, value, size) + member thi.RegWrite(eng, regId, value) = reg_write(eng, regId, value) + member thi.RegRead(eng, regId, value) = reg_read(eng, regId, value) + member thi.EmuStart(eng, beginAddr, untilAddr, timeout, count) = emu_start(eng, beginAddr, untilAddr, timeout, count) + member thi.EmuStop(eng) = emu_stop(eng) + member this.HookDel(eng, hook) = hook_del(eng, hook) + member thi.ArchSupported(arch) = arch_supported(arch) + member thi.Errono(eng) = errno(eng) + member thi.Strerror(err) = strerror(err) + member this.MemMapPtr(eng, address, size, perms, ptr) = mem_map_ptr(eng, address, size, perms, ptr) + member this.MemUnmap(eng, address, size) = mem_unmap(eng, address, size) + member this.MemProtect(eng, address, size, perms) = mem_protect(eng, address, size, perms) + member thi.HookAddNoarg(eng, hh, callbackType, callback, userData) = hook_add_noarg(eng, hh, callbackType, callback, userData) + member thi.HookAddArg0(eng, hh, callbackType, callback, userData, arg0) = hook_add_arg0(eng, hh, callbackType, callback, userData, arg0) + member thi.HookAddArg0Arg1(eng, hh, callbackType, callback, userData, arg0, arg1) = hook_add_arg0_arg1(eng, hh, callbackType, callback, userData, arg0, arg1) + } + diff --git a/bindings/dotnet/UnicornManaged/Binding/NativeBinding.fs b/bindings/dotnet/UnicornManaged/Binding/NativeBinding.fs new file mode 100644 index 00000000..4f37c7c8 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Binding/NativeBinding.fs @@ -0,0 +1,93 @@ +namespace UnicornManaged.Binding + +open System +open System.Runtime.InteropServices + +module NativeBinding = + + [] + module private Imported = + + [] + extern Int32 uc_version(UIntPtr major, UIntPtr minor) + + [] + extern Int32 uc_open(UInt32 arch, UInt32 mode, UIntPtr[] engine) + + [] + extern Int32 uc_close(UIntPtr eng) + + [] + extern Int32 uc_mem_map(UIntPtr eng, UInt64 address, UIntPtr size, UInt32 perm) + + [] + extern Int32 uc_mem_map_ptr(UIntPtr eng, UInt64 address, UIntPtr size, UInt32 perm, UIntPtr ptr) + + [] + extern Int32 uc_mem_unmap(UIntPtr eng, UInt64 address, UIntPtr size) + + [] + extern Int32 uc_mem_protect(UIntPtr eng, UInt64 address, UIntPtr size, UInt32 perms) + + [] + extern Int32 uc_mem_write(UIntPtr eng, UInt64 address, Byte[] value, UIntPtr size) + + [] + extern Int32 uc_mem_read(UIntPtr eng, UInt64 address, Byte[] value, UIntPtr size) + + [] + extern Int32 uc_reg_write(UIntPtr eng, Int32 regId, Byte[] value) + + [] + extern Int32 uc_reg_read(UIntPtr eng, Int32 regId, Byte[] value) + + [] + extern Int32 uc_emu_start(UIntPtr eng, UInt64 beginAddr, UInt64 untilAddr, UInt64 timeout, UInt64 count) + + [] + extern Int32 uc_emu_stop(UIntPtr eng) + + [] + extern Int32 uc_hook_del(UIntPtr eng, UIntPtr hook) + + [] + extern Boolean uc_arch_supported(Int32 arch) + + [] + extern Int32 uc_errno(UIntPtr eng) + + [] + extern IntPtr uc_strerror(Int32 err) + + [] + extern Int32 uc_hook_add_noarg(UIntPtr eng, UIntPtr hh, Int32 callbackType, UIntPtr callback, IntPtr userData) + + [] + extern Int32 uc_hook_add_arg0(UIntPtr eng, UIntPtr hh, Int32 callbackType, UIntPtr callback, IntPtr userData, Int32 arg0) + + [] + extern Int32 uc_hook_add_arg0_arg1(UIntPtr eng, UIntPtr hh, Int32 callbackType, UIntPtr callback, IntPtr userData, UInt64 arg0, UInt64 arg1) + + let instance = + {new IBinding with + member thi.Version(major, minor) = uc_version(major, minor) + member thi.UcOpen(arch, mode, uc) = uc_open(arch, mode, uc) + member thi.Close(eng) = uc_close(eng) + member thi.MemMap(eng, adress, size, perm) = uc_mem_map(eng, adress, size, perm) + member thi.MemWrite(eng, adress, value, size) = uc_mem_write(eng, adress, value, size) + member thi.MemRead(eng, adress, value, size) = uc_mem_read(eng, adress, value, size) + member thi.RegWrite(eng, regId, value) = uc_reg_write(eng, regId, value) + member thi.RegRead(eng, regId, value) = uc_reg_read(eng, regId, value) + member thi.EmuStart(eng, beginAddr, untilAddr, timeout, count) = uc_emu_start(eng, beginAddr, untilAddr, timeout, count) + member thi.EmuStop(eng) = uc_emu_stop(eng) + member this.HookDel(eng, hook) = uc_hook_del(eng, hook) + member thi.ArchSupported(arch) = uc_arch_supported(arch) + member thi.Errono(eng) = uc_errno(eng) + member thi.Strerror(err) = uc_strerror(err) + member this.MemMapPtr(eng, address, size, perms, ptr) = uc_mem_map_ptr(eng, address, size, perms, ptr) + member this.MemUnmap(eng, address, size) = uc_mem_unmap(eng, address, size) + member this.MemProtect(eng, address, size, perms) = uc_mem_protect(eng, address, size, perms) + member thi.HookAddNoarg(eng, hh, callbackType, callback, userData) = uc_hook_add_noarg(eng, hh, callbackType, callback, userData) + member thi.HookAddArg0(eng, hh, callbackType, callback, userData, arg0) = uc_hook_add_arg0(eng, hh, callbackType, callback, userData, arg0) + member thi.HookAddArg0Arg1(eng, hh, callbackType, callback, userData, arg0, arg1) = uc_hook_add_arg0_arg1(eng, hh, callbackType, callback, userData, arg0, arg1) + } \ No newline at end of file diff --git a/bindings/dotnet/UnicornManaged/Const/Arm.fs b/bindings/dotnet/UnicornManaged/Const/Arm.fs new file mode 100644 index 00000000..34eb91b6 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/Arm.fs @@ -0,0 +1,133 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module Arm = + + // ARM registers + + let UC_ARM_REG_INVALID = 0 + let UC_ARM_REG_APSR = 1 + let UC_ARM_REG_APSR_NZCV = 2 + let UC_ARM_REG_CPSR = 3 + let UC_ARM_REG_FPEXC = 4 + let UC_ARM_REG_FPINST = 5 + let UC_ARM_REG_FPSCR = 6 + let UC_ARM_REG_FPSCR_NZCV = 7 + let UC_ARM_REG_FPSID = 8 + let UC_ARM_REG_ITSTATE = 9 + let UC_ARM_REG_LR = 10 + let UC_ARM_REG_PC = 11 + let UC_ARM_REG_SP = 12 + let UC_ARM_REG_SPSR = 13 + let UC_ARM_REG_D0 = 14 + let UC_ARM_REG_D1 = 15 + let UC_ARM_REG_D2 = 16 + let UC_ARM_REG_D3 = 17 + let UC_ARM_REG_D4 = 18 + let UC_ARM_REG_D5 = 19 + let UC_ARM_REG_D6 = 20 + let UC_ARM_REG_D7 = 21 + let UC_ARM_REG_D8 = 22 + let UC_ARM_REG_D9 = 23 + let UC_ARM_REG_D10 = 24 + let UC_ARM_REG_D11 = 25 + let UC_ARM_REG_D12 = 26 + let UC_ARM_REG_D13 = 27 + let UC_ARM_REG_D14 = 28 + let UC_ARM_REG_D15 = 29 + let UC_ARM_REG_D16 = 30 + let UC_ARM_REG_D17 = 31 + let UC_ARM_REG_D18 = 32 + let UC_ARM_REG_D19 = 33 + let UC_ARM_REG_D20 = 34 + let UC_ARM_REG_D21 = 35 + let UC_ARM_REG_D22 = 36 + let UC_ARM_REG_D23 = 37 + let UC_ARM_REG_D24 = 38 + let UC_ARM_REG_D25 = 39 + let UC_ARM_REG_D26 = 40 + let UC_ARM_REG_D27 = 41 + let UC_ARM_REG_D28 = 42 + let UC_ARM_REG_D29 = 43 + let UC_ARM_REG_D30 = 44 + let UC_ARM_REG_D31 = 45 + let UC_ARM_REG_FPINST2 = 46 + let UC_ARM_REG_MVFR0 = 47 + let UC_ARM_REG_MVFR1 = 48 + let UC_ARM_REG_MVFR2 = 49 + let UC_ARM_REG_Q0 = 50 + let UC_ARM_REG_Q1 = 51 + let UC_ARM_REG_Q2 = 52 + let UC_ARM_REG_Q3 = 53 + let UC_ARM_REG_Q4 = 54 + let UC_ARM_REG_Q5 = 55 + let UC_ARM_REG_Q6 = 56 + let UC_ARM_REG_Q7 = 57 + let UC_ARM_REG_Q8 = 58 + let UC_ARM_REG_Q9 = 59 + let UC_ARM_REG_Q10 = 60 + let UC_ARM_REG_Q11 = 61 + let UC_ARM_REG_Q12 = 62 + let UC_ARM_REG_Q13 = 63 + let UC_ARM_REG_Q14 = 64 + let UC_ARM_REG_Q15 = 65 + let UC_ARM_REG_R0 = 66 + let UC_ARM_REG_R1 = 67 + let UC_ARM_REG_R2 = 68 + let UC_ARM_REG_R3 = 69 + let UC_ARM_REG_R4 = 70 + let UC_ARM_REG_R5 = 71 + let UC_ARM_REG_R6 = 72 + let UC_ARM_REG_R7 = 73 + let UC_ARM_REG_R8 = 74 + let UC_ARM_REG_R9 = 75 + let UC_ARM_REG_R10 = 76 + let UC_ARM_REG_R11 = 77 + let UC_ARM_REG_R12 = 78 + let UC_ARM_REG_S0 = 79 + let UC_ARM_REG_S1 = 80 + let UC_ARM_REG_S2 = 81 + let UC_ARM_REG_S3 = 82 + let UC_ARM_REG_S4 = 83 + let UC_ARM_REG_S5 = 84 + let UC_ARM_REG_S6 = 85 + let UC_ARM_REG_S7 = 86 + let UC_ARM_REG_S8 = 87 + let UC_ARM_REG_S9 = 88 + let UC_ARM_REG_S10 = 89 + let UC_ARM_REG_S11 = 90 + let UC_ARM_REG_S12 = 91 + let UC_ARM_REG_S13 = 92 + let UC_ARM_REG_S14 = 93 + let UC_ARM_REG_S15 = 94 + let UC_ARM_REG_S16 = 95 + let UC_ARM_REG_S17 = 96 + let UC_ARM_REG_S18 = 97 + let UC_ARM_REG_S19 = 98 + let UC_ARM_REG_S20 = 99 + let UC_ARM_REG_S21 = 100 + let UC_ARM_REG_S22 = 101 + let UC_ARM_REG_S23 = 102 + let UC_ARM_REG_S24 = 103 + let UC_ARM_REG_S25 = 104 + let UC_ARM_REG_S26 = 105 + let UC_ARM_REG_S27 = 106 + let UC_ARM_REG_S28 = 107 + let UC_ARM_REG_S29 = 108 + let UC_ARM_REG_S30 = 109 + let UC_ARM_REG_S31 = 110 + let UC_ARM_REG_ENDING = 111 + + // alias registers + let UC_ARM_REG_R13 = 12 + let UC_ARM_REG_R14 = 10 + let UC_ARM_REG_R15 = 11 + let UC_ARM_REG_SB = 75 + let UC_ARM_REG_SL = 76 + let UC_ARM_REG_FP = 77 + let UC_ARM_REG_IP = 78 + diff --git a/bindings/dotnet/UnicornManaged/Const/Arm64.fs b/bindings/dotnet/UnicornManaged/Const/Arm64.fs new file mode 100644 index 00000000..bb1a2140 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/Arm64.fs @@ -0,0 +1,282 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module Arm64 = + + // ARM64 registers + + let UC_ARM64_REG_INVALID = 0 + let UC_ARM64_REG_X29 = 1 + let UC_ARM64_REG_X30 = 2 + let UC_ARM64_REG_NZCV = 3 + let UC_ARM64_REG_SP = 4 + let UC_ARM64_REG_WSP = 5 + let UC_ARM64_REG_WZR = 6 + let UC_ARM64_REG_XZR = 7 + let UC_ARM64_REG_B0 = 8 + let UC_ARM64_REG_B1 = 9 + let UC_ARM64_REG_B2 = 10 + let UC_ARM64_REG_B3 = 11 + let UC_ARM64_REG_B4 = 12 + let UC_ARM64_REG_B5 = 13 + let UC_ARM64_REG_B6 = 14 + let UC_ARM64_REG_B7 = 15 + let UC_ARM64_REG_B8 = 16 + let UC_ARM64_REG_B9 = 17 + let UC_ARM64_REG_B10 = 18 + let UC_ARM64_REG_B11 = 19 + let UC_ARM64_REG_B12 = 20 + let UC_ARM64_REG_B13 = 21 + let UC_ARM64_REG_B14 = 22 + let UC_ARM64_REG_B15 = 23 + let UC_ARM64_REG_B16 = 24 + let UC_ARM64_REG_B17 = 25 + let UC_ARM64_REG_B18 = 26 + let UC_ARM64_REG_B19 = 27 + let UC_ARM64_REG_B20 = 28 + let UC_ARM64_REG_B21 = 29 + let UC_ARM64_REG_B22 = 30 + let UC_ARM64_REG_B23 = 31 + let UC_ARM64_REG_B24 = 32 + let UC_ARM64_REG_B25 = 33 + let UC_ARM64_REG_B26 = 34 + let UC_ARM64_REG_B27 = 35 + let UC_ARM64_REG_B28 = 36 + let UC_ARM64_REG_B29 = 37 + let UC_ARM64_REG_B30 = 38 + let UC_ARM64_REG_B31 = 39 + let UC_ARM64_REG_D0 = 40 + let UC_ARM64_REG_D1 = 41 + let UC_ARM64_REG_D2 = 42 + let UC_ARM64_REG_D3 = 43 + let UC_ARM64_REG_D4 = 44 + let UC_ARM64_REG_D5 = 45 + let UC_ARM64_REG_D6 = 46 + let UC_ARM64_REG_D7 = 47 + let UC_ARM64_REG_D8 = 48 + let UC_ARM64_REG_D9 = 49 + let UC_ARM64_REG_D10 = 50 + let UC_ARM64_REG_D11 = 51 + let UC_ARM64_REG_D12 = 52 + let UC_ARM64_REG_D13 = 53 + let UC_ARM64_REG_D14 = 54 + let UC_ARM64_REG_D15 = 55 + let UC_ARM64_REG_D16 = 56 + let UC_ARM64_REG_D17 = 57 + let UC_ARM64_REG_D18 = 58 + let UC_ARM64_REG_D19 = 59 + let UC_ARM64_REG_D20 = 60 + let UC_ARM64_REG_D21 = 61 + let UC_ARM64_REG_D22 = 62 + let UC_ARM64_REG_D23 = 63 + let UC_ARM64_REG_D24 = 64 + let UC_ARM64_REG_D25 = 65 + let UC_ARM64_REG_D26 = 66 + let UC_ARM64_REG_D27 = 67 + let UC_ARM64_REG_D28 = 68 + let UC_ARM64_REG_D29 = 69 + let UC_ARM64_REG_D30 = 70 + let UC_ARM64_REG_D31 = 71 + let UC_ARM64_REG_H0 = 72 + let UC_ARM64_REG_H1 = 73 + let UC_ARM64_REG_H2 = 74 + let UC_ARM64_REG_H3 = 75 + let UC_ARM64_REG_H4 = 76 + let UC_ARM64_REG_H5 = 77 + let UC_ARM64_REG_H6 = 78 + let UC_ARM64_REG_H7 = 79 + let UC_ARM64_REG_H8 = 80 + let UC_ARM64_REG_H9 = 81 + let UC_ARM64_REG_H10 = 82 + let UC_ARM64_REG_H11 = 83 + let UC_ARM64_REG_H12 = 84 + let UC_ARM64_REG_H13 = 85 + let UC_ARM64_REG_H14 = 86 + let UC_ARM64_REG_H15 = 87 + let UC_ARM64_REG_H16 = 88 + let UC_ARM64_REG_H17 = 89 + let UC_ARM64_REG_H18 = 90 + let UC_ARM64_REG_H19 = 91 + let UC_ARM64_REG_H20 = 92 + let UC_ARM64_REG_H21 = 93 + let UC_ARM64_REG_H22 = 94 + let UC_ARM64_REG_H23 = 95 + let UC_ARM64_REG_H24 = 96 + let UC_ARM64_REG_H25 = 97 + let UC_ARM64_REG_H26 = 98 + let UC_ARM64_REG_H27 = 99 + let UC_ARM64_REG_H28 = 100 + let UC_ARM64_REG_H29 = 101 + let UC_ARM64_REG_H30 = 102 + let UC_ARM64_REG_H31 = 103 + let UC_ARM64_REG_Q0 = 104 + let UC_ARM64_REG_Q1 = 105 + let UC_ARM64_REG_Q2 = 106 + let UC_ARM64_REG_Q3 = 107 + let UC_ARM64_REG_Q4 = 108 + let UC_ARM64_REG_Q5 = 109 + let UC_ARM64_REG_Q6 = 110 + let UC_ARM64_REG_Q7 = 111 + let UC_ARM64_REG_Q8 = 112 + let UC_ARM64_REG_Q9 = 113 + let UC_ARM64_REG_Q10 = 114 + let UC_ARM64_REG_Q11 = 115 + let UC_ARM64_REG_Q12 = 116 + let UC_ARM64_REG_Q13 = 117 + let UC_ARM64_REG_Q14 = 118 + let UC_ARM64_REG_Q15 = 119 + let UC_ARM64_REG_Q16 = 120 + let UC_ARM64_REG_Q17 = 121 + let UC_ARM64_REG_Q18 = 122 + let UC_ARM64_REG_Q19 = 123 + let UC_ARM64_REG_Q20 = 124 + let UC_ARM64_REG_Q21 = 125 + let UC_ARM64_REG_Q22 = 126 + let UC_ARM64_REG_Q23 = 127 + let UC_ARM64_REG_Q24 = 128 + let UC_ARM64_REG_Q25 = 129 + let UC_ARM64_REG_Q26 = 130 + let UC_ARM64_REG_Q27 = 131 + let UC_ARM64_REG_Q28 = 132 + let UC_ARM64_REG_Q29 = 133 + let UC_ARM64_REG_Q30 = 134 + let UC_ARM64_REG_Q31 = 135 + let UC_ARM64_REG_S0 = 136 + let UC_ARM64_REG_S1 = 137 + let UC_ARM64_REG_S2 = 138 + let UC_ARM64_REG_S3 = 139 + let UC_ARM64_REG_S4 = 140 + let UC_ARM64_REG_S5 = 141 + let UC_ARM64_REG_S6 = 142 + let UC_ARM64_REG_S7 = 143 + let UC_ARM64_REG_S8 = 144 + let UC_ARM64_REG_S9 = 145 + let UC_ARM64_REG_S10 = 146 + let UC_ARM64_REG_S11 = 147 + let UC_ARM64_REG_S12 = 148 + let UC_ARM64_REG_S13 = 149 + let UC_ARM64_REG_S14 = 150 + let UC_ARM64_REG_S15 = 151 + let UC_ARM64_REG_S16 = 152 + let UC_ARM64_REG_S17 = 153 + let UC_ARM64_REG_S18 = 154 + let UC_ARM64_REG_S19 = 155 + let UC_ARM64_REG_S20 = 156 + let UC_ARM64_REG_S21 = 157 + let UC_ARM64_REG_S22 = 158 + let UC_ARM64_REG_S23 = 159 + let UC_ARM64_REG_S24 = 160 + let UC_ARM64_REG_S25 = 161 + let UC_ARM64_REG_S26 = 162 + let UC_ARM64_REG_S27 = 163 + let UC_ARM64_REG_S28 = 164 + let UC_ARM64_REG_S29 = 165 + let UC_ARM64_REG_S30 = 166 + let UC_ARM64_REG_S31 = 167 + let UC_ARM64_REG_W0 = 168 + let UC_ARM64_REG_W1 = 169 + let UC_ARM64_REG_W2 = 170 + let UC_ARM64_REG_W3 = 171 + let UC_ARM64_REG_W4 = 172 + let UC_ARM64_REG_W5 = 173 + let UC_ARM64_REG_W6 = 174 + let UC_ARM64_REG_W7 = 175 + let UC_ARM64_REG_W8 = 176 + let UC_ARM64_REG_W9 = 177 + let UC_ARM64_REG_W10 = 178 + let UC_ARM64_REG_W11 = 179 + let UC_ARM64_REG_W12 = 180 + let UC_ARM64_REG_W13 = 181 + let UC_ARM64_REG_W14 = 182 + let UC_ARM64_REG_W15 = 183 + let UC_ARM64_REG_W16 = 184 + let UC_ARM64_REG_W17 = 185 + let UC_ARM64_REG_W18 = 186 + let UC_ARM64_REG_W19 = 187 + let UC_ARM64_REG_W20 = 188 + let UC_ARM64_REG_W21 = 189 + let UC_ARM64_REG_W22 = 190 + let UC_ARM64_REG_W23 = 191 + let UC_ARM64_REG_W24 = 192 + let UC_ARM64_REG_W25 = 193 + let UC_ARM64_REG_W26 = 194 + let UC_ARM64_REG_W27 = 195 + let UC_ARM64_REG_W28 = 196 + let UC_ARM64_REG_W29 = 197 + let UC_ARM64_REG_W30 = 198 + let UC_ARM64_REG_X0 = 199 + let UC_ARM64_REG_X1 = 200 + let UC_ARM64_REG_X2 = 201 + let UC_ARM64_REG_X3 = 202 + let UC_ARM64_REG_X4 = 203 + let UC_ARM64_REG_X5 = 204 + let UC_ARM64_REG_X6 = 205 + let UC_ARM64_REG_X7 = 206 + let UC_ARM64_REG_X8 = 207 + let UC_ARM64_REG_X9 = 208 + let UC_ARM64_REG_X10 = 209 + let UC_ARM64_REG_X11 = 210 + let UC_ARM64_REG_X12 = 211 + let UC_ARM64_REG_X13 = 212 + let UC_ARM64_REG_X14 = 213 + let UC_ARM64_REG_X15 = 214 + let UC_ARM64_REG_X16 = 215 + let UC_ARM64_REG_X17 = 216 + let UC_ARM64_REG_X18 = 217 + let UC_ARM64_REG_X19 = 218 + let UC_ARM64_REG_X20 = 219 + let UC_ARM64_REG_X21 = 220 + let UC_ARM64_REG_X22 = 221 + let UC_ARM64_REG_X23 = 222 + let UC_ARM64_REG_X24 = 223 + let UC_ARM64_REG_X25 = 224 + let UC_ARM64_REG_X26 = 225 + let UC_ARM64_REG_X27 = 226 + let UC_ARM64_REG_X28 = 227 + let UC_ARM64_REG_V0 = 228 + let UC_ARM64_REG_V1 = 229 + let UC_ARM64_REG_V2 = 230 + let UC_ARM64_REG_V3 = 231 + let UC_ARM64_REG_V4 = 232 + let UC_ARM64_REG_V5 = 233 + let UC_ARM64_REG_V6 = 234 + let UC_ARM64_REG_V7 = 235 + let UC_ARM64_REG_V8 = 236 + let UC_ARM64_REG_V9 = 237 + let UC_ARM64_REG_V10 = 238 + let UC_ARM64_REG_V11 = 239 + let UC_ARM64_REG_V12 = 240 + let UC_ARM64_REG_V13 = 241 + let UC_ARM64_REG_V14 = 242 + let UC_ARM64_REG_V15 = 243 + let UC_ARM64_REG_V16 = 244 + let UC_ARM64_REG_V17 = 245 + let UC_ARM64_REG_V18 = 246 + let UC_ARM64_REG_V19 = 247 + let UC_ARM64_REG_V20 = 248 + let UC_ARM64_REG_V21 = 249 + let UC_ARM64_REG_V22 = 250 + let UC_ARM64_REG_V23 = 251 + let UC_ARM64_REG_V24 = 252 + let UC_ARM64_REG_V25 = 253 + let UC_ARM64_REG_V26 = 254 + let UC_ARM64_REG_V27 = 255 + let UC_ARM64_REG_V28 = 256 + let UC_ARM64_REG_V29 = 257 + let UC_ARM64_REG_V30 = 258 + let UC_ARM64_REG_V31 = 259 + + // pseudo registers + let UC_ARM64_REG_PC = 260 + let UC_ARM64_REG_ENDING = 261 + + // alias registers + let UC_ARM64_REG_IP1 = 215 + let UC_ARM64_REG_IP0 = 216 + let UC_ARM64_REG_FP = 1 + let UC_ARM64_REG_LR = 2 + diff --git a/bindings/dotnet/UnicornManaged/Const/Common.fs b/bindings/dotnet/UnicornManaged/Const/Common.fs new file mode 100644 index 00000000..936b6d90 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/Common.fs @@ -0,0 +1,96 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module Common = + + let UC_API_MAJOR = 0 + let UC_API_MINOR = 9 + let UC_SECOND_SCALE = 1000000 + let UC_MILISECOND_SCALE = 1000 + let UC_ARCH_ARM = 1 + let UC_ARCH_ARM64 = 2 + let UC_ARCH_MIPS = 3 + let UC_ARCH_X86 = 4 + let UC_ARCH_PPC = 5 + let UC_ARCH_SPARC = 6 + let UC_ARCH_M68K = 7 + let UC_ARCH_MAX = 8 + + let UC_MODE_LITTLE_ENDIAN = 0 + + let UC_MODE_ARM = 0 + let UC_MODE_16 = 2 + let UC_MODE_32 = 4 + let UC_MODE_64 = 8 + let UC_MODE_THUMB = 16 + let UC_MODE_MCLASS = 32 + let UC_MODE_V8 = 64 + let UC_MODE_MICRO = 16 + let UC_MODE_MIPS3 = 32 + let UC_MODE_MIPS32R6 = 64 + let UC_MODE_V9 = 16 + let UC_MODE_QPX = 16 + let UC_MODE_BIG_ENDIAN = 1073741824 + let UC_MODE_MIPS32 = 4 + let UC_MODE_MIPS64 = 8 + + let UC_ERR_OK = 0 + let UC_ERR_NOMEM = 1 + let UC_ERR_ARCH = 2 + let UC_ERR_HANDLE = 3 + let UC_ERR_MODE = 4 + let UC_ERR_VERSION = 5 + let UC_ERR_READ_UNMAPPED = 6 + let UC_ERR_WRITE_UNMAPPED = 7 + let UC_ERR_FETCH_UNMAPPED = 8 + let UC_ERR_HOOK = 9 + let UC_ERR_INSN_INVALID = 10 + let UC_ERR_MAP = 11 + let UC_ERR_WRITE_PROT = 12 + let UC_ERR_READ_PROT = 13 + let UC_ERR_FETCH_PROT = 14 + let UC_ERR_ARG = 15 + let UC_ERR_READ_UNALIGNED = 16 + let UC_ERR_WRITE_UNALIGNED = 17 + let UC_ERR_FETCH_UNALIGNED = 18 + let UC_ERR_HOOK_EXIST = 19 + let UC_ERR_RESOURCE = 20 + let UC_MEM_READ = 16 + let UC_MEM_WRITE = 17 + let UC_MEM_FETCH = 18 + let UC_MEM_READ_UNMAPPED = 19 + let UC_MEM_WRITE_UNMAPPED = 20 + let UC_MEM_FETCH_UNMAPPED = 21 + let UC_MEM_WRITE_PROT = 22 + let UC_MEM_READ_PROT = 23 + let UC_MEM_FETCH_PROT = 24 + let UC_HOOK_INTR = 1 + let UC_HOOK_INSN = 2 + let UC_HOOK_CODE = 4 + let UC_HOOK_BLOCK = 8 + let UC_HOOK_MEM_READ_UNMAPPED = 16 + let UC_HOOK_MEM_WRITE_UNMAPPED = 32 + let UC_HOOK_MEM_FETCH_UNMAPPED = 64 + let UC_HOOK_MEM_READ_PROT = 128 + let UC_HOOK_MEM_WRITE_PROT = 256 + let UC_HOOK_MEM_FETCH_PROT = 512 + let UC_HOOK_MEM_READ = 1024 + let UC_HOOK_MEM_WRITE = 2048 + let UC_HOOK_MEM_FETCH = 4096 + let UC_HOOK_MEM_UNMAPPED = 112 + let UC_HOOK_MEM_PROT = 896 + let UC_HOOK_MEM_READ_INVALID = 144 + let UC_HOOK_MEM_WRITE_INVALID = 288 + let UC_HOOK_MEM_FETCH_INVALID = 576 + let UC_HOOK_MEM_INVALID = 1008 + + let UC_PROT_NONE = 0 + let UC_PROT_READ = 1 + let UC_PROT_WRITE = 2 + let UC_PROT_EXEC = 4 + let UC_PROT_ALL = 7 + diff --git a/bindings/dotnet/UnicornManaged/Const/M68k.fs b/bindings/dotnet/UnicornManaged/Const/M68k.fs new file mode 100644 index 00000000..8fc5157e --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/M68k.fs @@ -0,0 +1,32 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module M68k = + + // M68K registers + + let UC_M68K_REG_INVALID = 0 + let UC_M68K_REG_A0 = 1 + let UC_M68K_REG_A1 = 2 + let UC_M68K_REG_A2 = 3 + let UC_M68K_REG_A3 = 4 + let UC_M68K_REG_A4 = 5 + let UC_M68K_REG_A5 = 6 + let UC_M68K_REG_A6 = 7 + let UC_M68K_REG_A7 = 8 + let UC_M68K_REG_D0 = 9 + let UC_M68K_REG_D1 = 10 + let UC_M68K_REG_D2 = 11 + let UC_M68K_REG_D3 = 12 + let UC_M68K_REG_D4 = 13 + let UC_M68K_REG_D5 = 14 + let UC_M68K_REG_D6 = 15 + let UC_M68K_REG_D7 = 16 + let UC_M68K_REG_SR = 17 + let UC_M68K_REG_PC = 18 + let UC_M68K_REG_ENDING = 19 + diff --git a/bindings/dotnet/UnicornManaged/Const/Mips.fs b/bindings/dotnet/UnicornManaged/Const/Mips.fs new file mode 100644 index 00000000..4cc02627 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/Mips.fs @@ -0,0 +1,203 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module Mips = + + // MIPS registers + + let UC_MIPS_REG_INVALID = 0 + + // General purpose registers + let UC_MIPS_REG_PC = 1 + let UC_MIPS_REG_0 = 2 + let UC_MIPS_REG_1 = 3 + let UC_MIPS_REG_2 = 4 + let UC_MIPS_REG_3 = 5 + let UC_MIPS_REG_4 = 6 + let UC_MIPS_REG_5 = 7 + let UC_MIPS_REG_6 = 8 + let UC_MIPS_REG_7 = 9 + let UC_MIPS_REG_8 = 10 + let UC_MIPS_REG_9 = 11 + let UC_MIPS_REG_10 = 12 + let UC_MIPS_REG_11 = 13 + let UC_MIPS_REG_12 = 14 + let UC_MIPS_REG_13 = 15 + let UC_MIPS_REG_14 = 16 + let UC_MIPS_REG_15 = 17 + let UC_MIPS_REG_16 = 18 + let UC_MIPS_REG_17 = 19 + let UC_MIPS_REG_18 = 20 + let UC_MIPS_REG_19 = 21 + let UC_MIPS_REG_20 = 22 + let UC_MIPS_REG_21 = 23 + let UC_MIPS_REG_22 = 24 + let UC_MIPS_REG_23 = 25 + let UC_MIPS_REG_24 = 26 + let UC_MIPS_REG_25 = 27 + let UC_MIPS_REG_26 = 28 + let UC_MIPS_REG_27 = 29 + let UC_MIPS_REG_28 = 30 + let UC_MIPS_REG_29 = 31 + let UC_MIPS_REG_30 = 32 + let UC_MIPS_REG_31 = 33 + + // DSP registers + let UC_MIPS_REG_DSPCCOND = 34 + let UC_MIPS_REG_DSPCARRY = 35 + let UC_MIPS_REG_DSPEFI = 36 + let UC_MIPS_REG_DSPOUTFLAG = 37 + let UC_MIPS_REG_DSPOUTFLAG16_19 = 38 + let UC_MIPS_REG_DSPOUTFLAG20 = 39 + let UC_MIPS_REG_DSPOUTFLAG21 = 40 + let UC_MIPS_REG_DSPOUTFLAG22 = 41 + let UC_MIPS_REG_DSPOUTFLAG23 = 42 + let UC_MIPS_REG_DSPPOS = 43 + let UC_MIPS_REG_DSPSCOUNT = 44 + + // ACC registers + let UC_MIPS_REG_AC0 = 45 + let UC_MIPS_REG_AC1 = 46 + let UC_MIPS_REG_AC2 = 47 + let UC_MIPS_REG_AC3 = 48 + + // COP registers + let UC_MIPS_REG_CC0 = 49 + let UC_MIPS_REG_CC1 = 50 + let UC_MIPS_REG_CC2 = 51 + let UC_MIPS_REG_CC3 = 52 + let UC_MIPS_REG_CC4 = 53 + let UC_MIPS_REG_CC5 = 54 + let UC_MIPS_REG_CC6 = 55 + let UC_MIPS_REG_CC7 = 56 + + // FPU registers + let UC_MIPS_REG_F0 = 57 + let UC_MIPS_REG_F1 = 58 + let UC_MIPS_REG_F2 = 59 + let UC_MIPS_REG_F3 = 60 + let UC_MIPS_REG_F4 = 61 + let UC_MIPS_REG_F5 = 62 + let UC_MIPS_REG_F6 = 63 + let UC_MIPS_REG_F7 = 64 + let UC_MIPS_REG_F8 = 65 + let UC_MIPS_REG_F9 = 66 + let UC_MIPS_REG_F10 = 67 + let UC_MIPS_REG_F11 = 68 + let UC_MIPS_REG_F12 = 69 + let UC_MIPS_REG_F13 = 70 + let UC_MIPS_REG_F14 = 71 + let UC_MIPS_REG_F15 = 72 + let UC_MIPS_REG_F16 = 73 + let UC_MIPS_REG_F17 = 74 + let UC_MIPS_REG_F18 = 75 + let UC_MIPS_REG_F19 = 76 + let UC_MIPS_REG_F20 = 77 + let UC_MIPS_REG_F21 = 78 + let UC_MIPS_REG_F22 = 79 + let UC_MIPS_REG_F23 = 80 + let UC_MIPS_REG_F24 = 81 + let UC_MIPS_REG_F25 = 82 + let UC_MIPS_REG_F26 = 83 + let UC_MIPS_REG_F27 = 84 + let UC_MIPS_REG_F28 = 85 + let UC_MIPS_REG_F29 = 86 + let UC_MIPS_REG_F30 = 87 + let UC_MIPS_REG_F31 = 88 + let UC_MIPS_REG_FCC0 = 89 + let UC_MIPS_REG_FCC1 = 90 + let UC_MIPS_REG_FCC2 = 91 + let UC_MIPS_REG_FCC3 = 92 + let UC_MIPS_REG_FCC4 = 93 + let UC_MIPS_REG_FCC5 = 94 + let UC_MIPS_REG_FCC6 = 95 + let UC_MIPS_REG_FCC7 = 96 + + // AFPR128 + let UC_MIPS_REG_W0 = 97 + let UC_MIPS_REG_W1 = 98 + let UC_MIPS_REG_W2 = 99 + let UC_MIPS_REG_W3 = 100 + let UC_MIPS_REG_W4 = 101 + let UC_MIPS_REG_W5 = 102 + let UC_MIPS_REG_W6 = 103 + let UC_MIPS_REG_W7 = 104 + let UC_MIPS_REG_W8 = 105 + let UC_MIPS_REG_W9 = 106 + let UC_MIPS_REG_W10 = 107 + let UC_MIPS_REG_W11 = 108 + let UC_MIPS_REG_W12 = 109 + let UC_MIPS_REG_W13 = 110 + let UC_MIPS_REG_W14 = 111 + let UC_MIPS_REG_W15 = 112 + let UC_MIPS_REG_W16 = 113 + let UC_MIPS_REG_W17 = 114 + let UC_MIPS_REG_W18 = 115 + let UC_MIPS_REG_W19 = 116 + let UC_MIPS_REG_W20 = 117 + let UC_MIPS_REG_W21 = 118 + let UC_MIPS_REG_W22 = 119 + let UC_MIPS_REG_W23 = 120 + let UC_MIPS_REG_W24 = 121 + let UC_MIPS_REG_W25 = 122 + let UC_MIPS_REG_W26 = 123 + let UC_MIPS_REG_W27 = 124 + let UC_MIPS_REG_W28 = 125 + let UC_MIPS_REG_W29 = 126 + let UC_MIPS_REG_W30 = 127 + let UC_MIPS_REG_W31 = 128 + let UC_MIPS_REG_HI = 129 + let UC_MIPS_REG_LO = 130 + let UC_MIPS_REG_P0 = 131 + let UC_MIPS_REG_P1 = 132 + let UC_MIPS_REG_P2 = 133 + let UC_MIPS_REG_MPL0 = 134 + let UC_MIPS_REG_MPL1 = 135 + let UC_MIPS_REG_MPL2 = 136 + let UC_MIPS_REG_ENDING = 137 + let UC_MIPS_REG_ZERO = 2 + let UC_MIPS_REG_AT = 3 + let UC_MIPS_REG_V0 = 4 + let UC_MIPS_REG_V1 = 5 + let UC_MIPS_REG_A0 = 6 + let UC_MIPS_REG_A1 = 7 + let UC_MIPS_REG_A2 = 8 + let UC_MIPS_REG_A3 = 9 + let UC_MIPS_REG_T0 = 10 + let UC_MIPS_REG_T1 = 11 + let UC_MIPS_REG_T2 = 12 + let UC_MIPS_REG_T3 = 13 + let UC_MIPS_REG_T4 = 14 + let UC_MIPS_REG_T5 = 15 + let UC_MIPS_REG_T6 = 16 + let UC_MIPS_REG_T7 = 17 + let UC_MIPS_REG_S0 = 18 + let UC_MIPS_REG_S1 = 19 + let UC_MIPS_REG_S2 = 20 + let UC_MIPS_REG_S3 = 21 + let UC_MIPS_REG_S4 = 22 + let UC_MIPS_REG_S5 = 23 + let UC_MIPS_REG_S6 = 24 + let UC_MIPS_REG_S7 = 25 + let UC_MIPS_REG_T8 = 26 + let UC_MIPS_REG_T9 = 27 + let UC_MIPS_REG_K0 = 28 + let UC_MIPS_REG_K1 = 29 + let UC_MIPS_REG_GP = 30 + let UC_MIPS_REG_SP = 31 + let UC_MIPS_REG_FP = 32 + let UC_MIPS_REG_S8 = 32 + let UC_MIPS_REG_RA = 33 + let UC_MIPS_REG_HI0 = 45 + let UC_MIPS_REG_HI1 = 46 + let UC_MIPS_REG_HI2 = 47 + let UC_MIPS_REG_HI3 = 48 + let UC_MIPS_REG_LO0 = 45 + let UC_MIPS_REG_LO1 = 46 + let UC_MIPS_REG_LO2 = 47 + let UC_MIPS_REG_LO3 = 48 + diff --git a/bindings/dotnet/UnicornManaged/Const/Sparc.fs b/bindings/dotnet/UnicornManaged/Const/Sparc.fs new file mode 100644 index 00000000..9a91e1a7 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/Sparc.fs @@ -0,0 +1,104 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module Sparc = + + // SPARC registers + + let UC_SPARC_REG_INVALID = 0 + let UC_SPARC_REG_F0 = 1 + let UC_SPARC_REG_F1 = 2 + let UC_SPARC_REG_F2 = 3 + let UC_SPARC_REG_F3 = 4 + let UC_SPARC_REG_F4 = 5 + let UC_SPARC_REG_F5 = 6 + let UC_SPARC_REG_F6 = 7 + let UC_SPARC_REG_F7 = 8 + let UC_SPARC_REG_F8 = 9 + let UC_SPARC_REG_F9 = 10 + let UC_SPARC_REG_F10 = 11 + let UC_SPARC_REG_F11 = 12 + let UC_SPARC_REG_F12 = 13 + let UC_SPARC_REG_F13 = 14 + let UC_SPARC_REG_F14 = 15 + let UC_SPARC_REG_F15 = 16 + let UC_SPARC_REG_F16 = 17 + let UC_SPARC_REG_F17 = 18 + let UC_SPARC_REG_F18 = 19 + let UC_SPARC_REG_F19 = 20 + let UC_SPARC_REG_F20 = 21 + let UC_SPARC_REG_F21 = 22 + let UC_SPARC_REG_F22 = 23 + let UC_SPARC_REG_F23 = 24 + let UC_SPARC_REG_F24 = 25 + let UC_SPARC_REG_F25 = 26 + let UC_SPARC_REG_F26 = 27 + let UC_SPARC_REG_F27 = 28 + let UC_SPARC_REG_F28 = 29 + let UC_SPARC_REG_F29 = 30 + let UC_SPARC_REG_F30 = 31 + let UC_SPARC_REG_F31 = 32 + let UC_SPARC_REG_F32 = 33 + let UC_SPARC_REG_F34 = 34 + let UC_SPARC_REG_F36 = 35 + let UC_SPARC_REG_F38 = 36 + let UC_SPARC_REG_F40 = 37 + let UC_SPARC_REG_F42 = 38 + let UC_SPARC_REG_F44 = 39 + let UC_SPARC_REG_F46 = 40 + let UC_SPARC_REG_F48 = 41 + let UC_SPARC_REG_F50 = 42 + let UC_SPARC_REG_F52 = 43 + let UC_SPARC_REG_F54 = 44 + let UC_SPARC_REG_F56 = 45 + let UC_SPARC_REG_F58 = 46 + let UC_SPARC_REG_F60 = 47 + let UC_SPARC_REG_F62 = 48 + let UC_SPARC_REG_FCC0 = 49 + let UC_SPARC_REG_FCC1 = 50 + let UC_SPARC_REG_FCC2 = 51 + let UC_SPARC_REG_FCC3 = 52 + let UC_SPARC_REG_G0 = 53 + let UC_SPARC_REG_G1 = 54 + let UC_SPARC_REG_G2 = 55 + let UC_SPARC_REG_G3 = 56 + let UC_SPARC_REG_G4 = 57 + let UC_SPARC_REG_G5 = 58 + let UC_SPARC_REG_G6 = 59 + let UC_SPARC_REG_G7 = 60 + let UC_SPARC_REG_I0 = 61 + let UC_SPARC_REG_I1 = 62 + let UC_SPARC_REG_I2 = 63 + let UC_SPARC_REG_I3 = 64 + let UC_SPARC_REG_I4 = 65 + let UC_SPARC_REG_I5 = 66 + let UC_SPARC_REG_FP = 67 + let UC_SPARC_REG_I7 = 68 + let UC_SPARC_REG_ICC = 69 + let UC_SPARC_REG_L0 = 70 + let UC_SPARC_REG_L1 = 71 + let UC_SPARC_REG_L2 = 72 + let UC_SPARC_REG_L3 = 73 + let UC_SPARC_REG_L4 = 74 + let UC_SPARC_REG_L5 = 75 + let UC_SPARC_REG_L6 = 76 + let UC_SPARC_REG_L7 = 77 + let UC_SPARC_REG_O0 = 78 + let UC_SPARC_REG_O1 = 79 + let UC_SPARC_REG_O2 = 80 + let UC_SPARC_REG_O3 = 81 + let UC_SPARC_REG_O4 = 82 + let UC_SPARC_REG_O5 = 83 + let UC_SPARC_REG_SP = 84 + let UC_SPARC_REG_O7 = 85 + let UC_SPARC_REG_Y = 86 + let UC_SPARC_REG_XCC = 87 + let UC_SPARC_REG_PC = 88 + let UC_SPARC_REG_ENDING = 89 + let UC_SPARC_REG_O6 = 84 + let UC_SPARC_REG_I6 = 67 + diff --git a/bindings/dotnet/UnicornManaged/Const/X86.fs b/bindings/dotnet/UnicornManaged/Const/X86.fs new file mode 100644 index 00000000..01fca68e --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Const/X86.fs @@ -0,0 +1,1597 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +namespace UnicornManaged.Const + +open System + +[] +module X86 = + + // X86 registers + + let UC_X86_REG_INVALID = 0 + let UC_X86_REG_AH = 1 + let UC_X86_REG_AL = 2 + let UC_X86_REG_AX = 3 + let UC_X86_REG_BH = 4 + let UC_X86_REG_BL = 5 + let UC_X86_REG_BP = 6 + let UC_X86_REG_BPL = 7 + let UC_X86_REG_BX = 8 + let UC_X86_REG_CH = 9 + let UC_X86_REG_CL = 10 + let UC_X86_REG_CS = 11 + let UC_X86_REG_CX = 12 + let UC_X86_REG_DH = 13 + let UC_X86_REG_DI = 14 + let UC_X86_REG_DIL = 15 + let UC_X86_REG_DL = 16 + let UC_X86_REG_DS = 17 + let UC_X86_REG_DX = 18 + let UC_X86_REG_EAX = 19 + let UC_X86_REG_EBP = 20 + let UC_X86_REG_EBX = 21 + let UC_X86_REG_ECX = 22 + let UC_X86_REG_EDI = 23 + let UC_X86_REG_EDX = 24 + let UC_X86_REG_EFLAGS = 25 + let UC_X86_REG_EIP = 26 + let UC_X86_REG_EIZ = 27 + let UC_X86_REG_ES = 28 + let UC_X86_REG_ESI = 29 + let UC_X86_REG_ESP = 30 + let UC_X86_REG_FPSW = 31 + let UC_X86_REG_FS = 32 + let UC_X86_REG_GS = 33 + let UC_X86_REG_IP = 34 + let UC_X86_REG_RAX = 35 + let UC_X86_REG_RBP = 36 + let UC_X86_REG_RBX = 37 + let UC_X86_REG_RCX = 38 + let UC_X86_REG_RDI = 39 + let UC_X86_REG_RDX = 40 + let UC_X86_REG_RIP = 41 + let UC_X86_REG_RIZ = 42 + let UC_X86_REG_RSI = 43 + let UC_X86_REG_RSP = 44 + let UC_X86_REG_SI = 45 + let UC_X86_REG_SIL = 46 + let UC_X86_REG_SP = 47 + let UC_X86_REG_SPL = 48 + let UC_X86_REG_SS = 49 + let UC_X86_REG_CR0 = 50 + let UC_X86_REG_CR1 = 51 + let UC_X86_REG_CR2 = 52 + let UC_X86_REG_CR3 = 53 + let UC_X86_REG_CR4 = 54 + let UC_X86_REG_CR5 = 55 + let UC_X86_REG_CR6 = 56 + let UC_X86_REG_CR7 = 57 + let UC_X86_REG_CR8 = 58 + let UC_X86_REG_CR9 = 59 + let UC_X86_REG_CR10 = 60 + let UC_X86_REG_CR11 = 61 + let UC_X86_REG_CR12 = 62 + let UC_X86_REG_CR13 = 63 + let UC_X86_REG_CR14 = 64 + let UC_X86_REG_CR15 = 65 + let UC_X86_REG_DR0 = 66 + let UC_X86_REG_DR1 = 67 + let UC_X86_REG_DR2 = 68 + let UC_X86_REG_DR3 = 69 + let UC_X86_REG_DR4 = 70 + let UC_X86_REG_DR5 = 71 + let UC_X86_REG_DR6 = 72 + let UC_X86_REG_DR7 = 73 + let UC_X86_REG_DR8 = 74 + let UC_X86_REG_DR9 = 75 + let UC_X86_REG_DR10 = 76 + let UC_X86_REG_DR11 = 77 + let UC_X86_REG_DR12 = 78 + let UC_X86_REG_DR13 = 79 + let UC_X86_REG_DR14 = 80 + let UC_X86_REG_DR15 = 81 + let UC_X86_REG_FP0 = 82 + let UC_X86_REG_FP1 = 83 + let UC_X86_REG_FP2 = 84 + let UC_X86_REG_FP3 = 85 + let UC_X86_REG_FP4 = 86 + let UC_X86_REG_FP5 = 87 + let UC_X86_REG_FP6 = 88 + let UC_X86_REG_FP7 = 89 + let UC_X86_REG_K0 = 90 + let UC_X86_REG_K1 = 91 + let UC_X86_REG_K2 = 92 + let UC_X86_REG_K3 = 93 + let UC_X86_REG_K4 = 94 + let UC_X86_REG_K5 = 95 + let UC_X86_REG_K6 = 96 + let UC_X86_REG_K7 = 97 + let UC_X86_REG_MM0 = 98 + let UC_X86_REG_MM1 = 99 + let UC_X86_REG_MM2 = 100 + let UC_X86_REG_MM3 = 101 + let UC_X86_REG_MM4 = 102 + let UC_X86_REG_MM5 = 103 + let UC_X86_REG_MM6 = 104 + let UC_X86_REG_MM7 = 105 + let UC_X86_REG_R8 = 106 + let UC_X86_REG_R9 = 107 + let UC_X86_REG_R10 = 108 + let UC_X86_REG_R11 = 109 + let UC_X86_REG_R12 = 110 + let UC_X86_REG_R13 = 111 + let UC_X86_REG_R14 = 112 + let UC_X86_REG_R15 = 113 + let UC_X86_REG_ST0 = 114 + let UC_X86_REG_ST1 = 115 + let UC_X86_REG_ST2 = 116 + let UC_X86_REG_ST3 = 117 + let UC_X86_REG_ST4 = 118 + let UC_X86_REG_ST5 = 119 + let UC_X86_REG_ST6 = 120 + let UC_X86_REG_ST7 = 121 + let UC_X86_REG_XMM0 = 122 + let UC_X86_REG_XMM1 = 123 + let UC_X86_REG_XMM2 = 124 + let UC_X86_REG_XMM3 = 125 + let UC_X86_REG_XMM4 = 126 + let UC_X86_REG_XMM5 = 127 + let UC_X86_REG_XMM6 = 128 + let UC_X86_REG_XMM7 = 129 + let UC_X86_REG_XMM8 = 130 + let UC_X86_REG_XMM9 = 131 + let UC_X86_REG_XMM10 = 132 + let UC_X86_REG_XMM11 = 133 + let UC_X86_REG_XMM12 = 134 + let UC_X86_REG_XMM13 = 135 + let UC_X86_REG_XMM14 = 136 + let UC_X86_REG_XMM15 = 137 + let UC_X86_REG_XMM16 = 138 + let UC_X86_REG_XMM17 = 139 + let UC_X86_REG_XMM18 = 140 + let UC_X86_REG_XMM19 = 141 + let UC_X86_REG_XMM20 = 142 + let UC_X86_REG_XMM21 = 143 + let UC_X86_REG_XMM22 = 144 + let UC_X86_REG_XMM23 = 145 + let UC_X86_REG_XMM24 = 146 + let UC_X86_REG_XMM25 = 147 + let UC_X86_REG_XMM26 = 148 + let UC_X86_REG_XMM27 = 149 + let UC_X86_REG_XMM28 = 150 + let UC_X86_REG_XMM29 = 151 + let UC_X86_REG_XMM30 = 152 + let UC_X86_REG_XMM31 = 153 + let UC_X86_REG_YMM0 = 154 + let UC_X86_REG_YMM1 = 155 + let UC_X86_REG_YMM2 = 156 + let UC_X86_REG_YMM3 = 157 + let UC_X86_REG_YMM4 = 158 + let UC_X86_REG_YMM5 = 159 + let UC_X86_REG_YMM6 = 160 + let UC_X86_REG_YMM7 = 161 + let UC_X86_REG_YMM8 = 162 + let UC_X86_REG_YMM9 = 163 + let UC_X86_REG_YMM10 = 164 + let UC_X86_REG_YMM11 = 165 + let UC_X86_REG_YMM12 = 166 + let UC_X86_REG_YMM13 = 167 + let UC_X86_REG_YMM14 = 168 + let UC_X86_REG_YMM15 = 169 + let UC_X86_REG_YMM16 = 170 + let UC_X86_REG_YMM17 = 171 + let UC_X86_REG_YMM18 = 172 + let UC_X86_REG_YMM19 = 173 + let UC_X86_REG_YMM20 = 174 + let UC_X86_REG_YMM21 = 175 + let UC_X86_REG_YMM22 = 176 + let UC_X86_REG_YMM23 = 177 + let UC_X86_REG_YMM24 = 178 + let UC_X86_REG_YMM25 = 179 + let UC_X86_REG_YMM26 = 180 + let UC_X86_REG_YMM27 = 181 + let UC_X86_REG_YMM28 = 182 + let UC_X86_REG_YMM29 = 183 + let UC_X86_REG_YMM30 = 184 + let UC_X86_REG_YMM31 = 185 + let UC_X86_REG_ZMM0 = 186 + let UC_X86_REG_ZMM1 = 187 + let UC_X86_REG_ZMM2 = 188 + let UC_X86_REG_ZMM3 = 189 + let UC_X86_REG_ZMM4 = 190 + let UC_X86_REG_ZMM5 = 191 + let UC_X86_REG_ZMM6 = 192 + let UC_X86_REG_ZMM7 = 193 + let UC_X86_REG_ZMM8 = 194 + let UC_X86_REG_ZMM9 = 195 + let UC_X86_REG_ZMM10 = 196 + let UC_X86_REG_ZMM11 = 197 + let UC_X86_REG_ZMM12 = 198 + let UC_X86_REG_ZMM13 = 199 + let UC_X86_REG_ZMM14 = 200 + let UC_X86_REG_ZMM15 = 201 + let UC_X86_REG_ZMM16 = 202 + let UC_X86_REG_ZMM17 = 203 + let UC_X86_REG_ZMM18 = 204 + let UC_X86_REG_ZMM19 = 205 + let UC_X86_REG_ZMM20 = 206 + let UC_X86_REG_ZMM21 = 207 + let UC_X86_REG_ZMM22 = 208 + let UC_X86_REG_ZMM23 = 209 + let UC_X86_REG_ZMM24 = 210 + let UC_X86_REG_ZMM25 = 211 + let UC_X86_REG_ZMM26 = 212 + let UC_X86_REG_ZMM27 = 213 + let UC_X86_REG_ZMM28 = 214 + let UC_X86_REG_ZMM29 = 215 + let UC_X86_REG_ZMM30 = 216 + let UC_X86_REG_ZMM31 = 217 + let UC_X86_REG_R8B = 218 + let UC_X86_REG_R9B = 219 + let UC_X86_REG_R10B = 220 + let UC_X86_REG_R11B = 221 + let UC_X86_REG_R12B = 222 + let UC_X86_REG_R13B = 223 + let UC_X86_REG_R14B = 224 + let UC_X86_REG_R15B = 225 + let UC_X86_REG_R8D = 226 + let UC_X86_REG_R9D = 227 + let UC_X86_REG_R10D = 228 + let UC_X86_REG_R11D = 229 + let UC_X86_REG_R12D = 230 + let UC_X86_REG_R13D = 231 + let UC_X86_REG_R14D = 232 + let UC_X86_REG_R15D = 233 + let UC_X86_REG_R8W = 234 + let UC_X86_REG_R9W = 235 + let UC_X86_REG_R10W = 236 + let UC_X86_REG_R11W = 237 + let UC_X86_REG_R12W = 238 + let UC_X86_REG_R13W = 239 + let UC_X86_REG_R14W = 240 + let UC_X86_REG_R15W = 241 + let UC_X86_REG_ENDING = 242 + + // X86 instructions + + let UC_X86_INS_INVALID = 0 + let UC_X86_INS_AAA = 1 + let UC_X86_INS_AAD = 2 + let UC_X86_INS_AAM = 3 + let UC_X86_INS_AAS = 4 + let UC_X86_INS_FABS = 5 + let UC_X86_INS_ADC = 6 + let UC_X86_INS_ADCX = 7 + let UC_X86_INS_ADD = 8 + let UC_X86_INS_ADDPD = 9 + let UC_X86_INS_ADDPS = 10 + let UC_X86_INS_ADDSD = 11 + let UC_X86_INS_ADDSS = 12 + let UC_X86_INS_ADDSUBPD = 13 + let UC_X86_INS_ADDSUBPS = 14 + let UC_X86_INS_FADD = 15 + let UC_X86_INS_FIADD = 16 + let UC_X86_INS_FADDP = 17 + let UC_X86_INS_ADOX = 18 + let UC_X86_INS_AESDECLAST = 19 + let UC_X86_INS_AESDEC = 20 + let UC_X86_INS_AESENCLAST = 21 + let UC_X86_INS_AESENC = 22 + let UC_X86_INS_AESIMC = 23 + let UC_X86_INS_AESKEYGENASSIST = 24 + let UC_X86_INS_AND = 25 + let UC_X86_INS_ANDN = 26 + let UC_X86_INS_ANDNPD = 27 + let UC_X86_INS_ANDNPS = 28 + let UC_X86_INS_ANDPD = 29 + let UC_X86_INS_ANDPS = 30 + let UC_X86_INS_ARPL = 31 + let UC_X86_INS_BEXTR = 32 + let UC_X86_INS_BLCFILL = 33 + let UC_X86_INS_BLCI = 34 + let UC_X86_INS_BLCIC = 35 + let UC_X86_INS_BLCMSK = 36 + let UC_X86_INS_BLCS = 37 + let UC_X86_INS_BLENDPD = 38 + let UC_X86_INS_BLENDPS = 39 + let UC_X86_INS_BLENDVPD = 40 + let UC_X86_INS_BLENDVPS = 41 + let UC_X86_INS_BLSFILL = 42 + let UC_X86_INS_BLSI = 43 + let UC_X86_INS_BLSIC = 44 + let UC_X86_INS_BLSMSK = 45 + let UC_X86_INS_BLSR = 46 + let UC_X86_INS_BOUND = 47 + let UC_X86_INS_BSF = 48 + let UC_X86_INS_BSR = 49 + let UC_X86_INS_BSWAP = 50 + let UC_X86_INS_BT = 51 + let UC_X86_INS_BTC = 52 + let UC_X86_INS_BTR = 53 + let UC_X86_INS_BTS = 54 + let UC_X86_INS_BZHI = 55 + let UC_X86_INS_CALL = 56 + let UC_X86_INS_CBW = 57 + let UC_X86_INS_CDQ = 58 + let UC_X86_INS_CDQE = 59 + let UC_X86_INS_FCHS = 60 + let UC_X86_INS_CLAC = 61 + let UC_X86_INS_CLC = 62 + let UC_X86_INS_CLD = 63 + let UC_X86_INS_CLFLUSH = 64 + let UC_X86_INS_CLFLUSHOPT = 65 + let UC_X86_INS_CLGI = 66 + let UC_X86_INS_CLI = 67 + let UC_X86_INS_CLTS = 68 + let UC_X86_INS_CLWB = 69 + let UC_X86_INS_CMC = 70 + let UC_X86_INS_CMOVA = 71 + let UC_X86_INS_CMOVAE = 72 + let UC_X86_INS_CMOVB = 73 + let UC_X86_INS_CMOVBE = 74 + let UC_X86_INS_FCMOVBE = 75 + let UC_X86_INS_FCMOVB = 76 + let UC_X86_INS_CMOVE = 77 + let UC_X86_INS_FCMOVE = 78 + let UC_X86_INS_CMOVG = 79 + let UC_X86_INS_CMOVGE = 80 + let UC_X86_INS_CMOVL = 81 + let UC_X86_INS_CMOVLE = 82 + let UC_X86_INS_FCMOVNBE = 83 + let UC_X86_INS_FCMOVNB = 84 + let UC_X86_INS_CMOVNE = 85 + let UC_X86_INS_FCMOVNE = 86 + let UC_X86_INS_CMOVNO = 87 + let UC_X86_INS_CMOVNP = 88 + let UC_X86_INS_FCMOVNU = 89 + let UC_X86_INS_CMOVNS = 90 + let UC_X86_INS_CMOVO = 91 + let UC_X86_INS_CMOVP = 92 + let UC_X86_INS_FCMOVU = 93 + let UC_X86_INS_CMOVS = 94 + let UC_X86_INS_CMP = 95 + let UC_X86_INS_CMPPD = 96 + let UC_X86_INS_CMPPS = 97 + let UC_X86_INS_CMPSB = 98 + let UC_X86_INS_CMPSD = 99 + let UC_X86_INS_CMPSQ = 100 + let UC_X86_INS_CMPSS = 101 + let UC_X86_INS_CMPSW = 102 + let UC_X86_INS_CMPXCHG16B = 103 + let UC_X86_INS_CMPXCHG = 104 + let UC_X86_INS_CMPXCHG8B = 105 + let UC_X86_INS_COMISD = 106 + let UC_X86_INS_COMISS = 107 + let UC_X86_INS_FCOMP = 108 + let UC_X86_INS_FCOMPI = 109 + let UC_X86_INS_FCOMI = 110 + let UC_X86_INS_FCOM = 111 + let UC_X86_INS_FCOS = 112 + let UC_X86_INS_CPUID = 113 + let UC_X86_INS_CQO = 114 + let UC_X86_INS_CRC32 = 115 + let UC_X86_INS_CVTDQ2PD = 116 + let UC_X86_INS_CVTDQ2PS = 117 + let UC_X86_INS_CVTPD2DQ = 118 + let UC_X86_INS_CVTPD2PS = 119 + let UC_X86_INS_CVTPS2DQ = 120 + let UC_X86_INS_CVTPS2PD = 121 + let UC_X86_INS_CVTSD2SI = 122 + let UC_X86_INS_CVTSD2SS = 123 + let UC_X86_INS_CVTSI2SD = 124 + let UC_X86_INS_CVTSI2SS = 125 + let UC_X86_INS_CVTSS2SD = 126 + let UC_X86_INS_CVTSS2SI = 127 + let UC_X86_INS_CVTTPD2DQ = 128 + let UC_X86_INS_CVTTPS2DQ = 129 + let UC_X86_INS_CVTTSD2SI = 130 + let UC_X86_INS_CVTTSS2SI = 131 + let UC_X86_INS_CWD = 132 + let UC_X86_INS_CWDE = 133 + let UC_X86_INS_DAA = 134 + let UC_X86_INS_DAS = 135 + let UC_X86_INS_DATA16 = 136 + let UC_X86_INS_DEC = 137 + let UC_X86_INS_DIV = 138 + let UC_X86_INS_DIVPD = 139 + let UC_X86_INS_DIVPS = 140 + let UC_X86_INS_FDIVR = 141 + let UC_X86_INS_FIDIVR = 142 + let UC_X86_INS_FDIVRP = 143 + let UC_X86_INS_DIVSD = 144 + let UC_X86_INS_DIVSS = 145 + let UC_X86_INS_FDIV = 146 + let UC_X86_INS_FIDIV = 147 + let UC_X86_INS_FDIVP = 148 + let UC_X86_INS_DPPD = 149 + let UC_X86_INS_DPPS = 150 + let UC_X86_INS_RET = 151 + let UC_X86_INS_ENCLS = 152 + let UC_X86_INS_ENCLU = 153 + let UC_X86_INS_ENTER = 154 + let UC_X86_INS_EXTRACTPS = 155 + let UC_X86_INS_EXTRQ = 156 + let UC_X86_INS_F2XM1 = 157 + let UC_X86_INS_LCALL = 158 + let UC_X86_INS_LJMP = 159 + let UC_X86_INS_FBLD = 160 + let UC_X86_INS_FBSTP = 161 + let UC_X86_INS_FCOMPP = 162 + let UC_X86_INS_FDECSTP = 163 + let UC_X86_INS_FEMMS = 164 + let UC_X86_INS_FFREE = 165 + let UC_X86_INS_FICOM = 166 + let UC_X86_INS_FICOMP = 167 + let UC_X86_INS_FINCSTP = 168 + let UC_X86_INS_FLDCW = 169 + let UC_X86_INS_FLDENV = 170 + let UC_X86_INS_FLDL2E = 171 + let UC_X86_INS_FLDL2T = 172 + let UC_X86_INS_FLDLG2 = 173 + let UC_X86_INS_FLDLN2 = 174 + let UC_X86_INS_FLDPI = 175 + let UC_X86_INS_FNCLEX = 176 + let UC_X86_INS_FNINIT = 177 + let UC_X86_INS_FNOP = 178 + let UC_X86_INS_FNSTCW = 179 + let UC_X86_INS_FNSTSW = 180 + let UC_X86_INS_FPATAN = 181 + let UC_X86_INS_FPREM = 182 + let UC_X86_INS_FPREM1 = 183 + let UC_X86_INS_FPTAN = 184 + let UC_X86_INS_FFREEP = 185 + let UC_X86_INS_FRNDINT = 186 + let UC_X86_INS_FRSTOR = 187 + let UC_X86_INS_FNSAVE = 188 + let UC_X86_INS_FSCALE = 189 + let UC_X86_INS_FSETPM = 190 + let UC_X86_INS_FSINCOS = 191 + let UC_X86_INS_FNSTENV = 192 + let UC_X86_INS_FXAM = 193 + let UC_X86_INS_FXRSTOR = 194 + let UC_X86_INS_FXRSTOR64 = 195 + let UC_X86_INS_FXSAVE = 196 + let UC_X86_INS_FXSAVE64 = 197 + let UC_X86_INS_FXTRACT = 198 + let UC_X86_INS_FYL2X = 199 + let UC_X86_INS_FYL2XP1 = 200 + let UC_X86_INS_MOVAPD = 201 + let UC_X86_INS_MOVAPS = 202 + let UC_X86_INS_ORPD = 203 + let UC_X86_INS_ORPS = 204 + let UC_X86_INS_VMOVAPD = 205 + let UC_X86_INS_VMOVAPS = 206 + let UC_X86_INS_XORPD = 207 + let UC_X86_INS_XORPS = 208 + let UC_X86_INS_GETSEC = 209 + let UC_X86_INS_HADDPD = 210 + let UC_X86_INS_HADDPS = 211 + let UC_X86_INS_HLT = 212 + let UC_X86_INS_HSUBPD = 213 + let UC_X86_INS_HSUBPS = 214 + let UC_X86_INS_IDIV = 215 + let UC_X86_INS_FILD = 216 + let UC_X86_INS_IMUL = 217 + let UC_X86_INS_IN = 218 + let UC_X86_INS_INC = 219 + let UC_X86_INS_INSB = 220 + let UC_X86_INS_INSERTPS = 221 + let UC_X86_INS_INSERTQ = 222 + let UC_X86_INS_INSD = 223 + let UC_X86_INS_INSW = 224 + let UC_X86_INS_INT = 225 + let UC_X86_INS_INT1 = 226 + let UC_X86_INS_INT3 = 227 + let UC_X86_INS_INTO = 228 + let UC_X86_INS_INVD = 229 + let UC_X86_INS_INVEPT = 230 + let UC_X86_INS_INVLPG = 231 + let UC_X86_INS_INVLPGA = 232 + let UC_X86_INS_INVPCID = 233 + let UC_X86_INS_INVVPID = 234 + let UC_X86_INS_IRET = 235 + let UC_X86_INS_IRETD = 236 + let UC_X86_INS_IRETQ = 237 + let UC_X86_INS_FISTTP = 238 + let UC_X86_INS_FIST = 239 + let UC_X86_INS_FISTP = 240 + let UC_X86_INS_UCOMISD = 241 + let UC_X86_INS_UCOMISS = 242 + let UC_X86_INS_VCOMISD = 243 + let UC_X86_INS_VCOMISS = 244 + let UC_X86_INS_VCVTSD2SS = 245 + let UC_X86_INS_VCVTSI2SD = 246 + let UC_X86_INS_VCVTSI2SS = 247 + let UC_X86_INS_VCVTSS2SD = 248 + let UC_X86_INS_VCVTTSD2SI = 249 + let UC_X86_INS_VCVTTSD2USI = 250 + let UC_X86_INS_VCVTTSS2SI = 251 + let UC_X86_INS_VCVTTSS2USI = 252 + let UC_X86_INS_VCVTUSI2SD = 253 + let UC_X86_INS_VCVTUSI2SS = 254 + let UC_X86_INS_VUCOMISD = 255 + let UC_X86_INS_VUCOMISS = 256 + let UC_X86_INS_JAE = 257 + let UC_X86_INS_JA = 258 + let UC_X86_INS_JBE = 259 + let UC_X86_INS_JB = 260 + let UC_X86_INS_JCXZ = 261 + let UC_X86_INS_JECXZ = 262 + let UC_X86_INS_JE = 263 + let UC_X86_INS_JGE = 264 + let UC_X86_INS_JG = 265 + let UC_X86_INS_JLE = 266 + let UC_X86_INS_JL = 267 + let UC_X86_INS_JMP = 268 + let UC_X86_INS_JNE = 269 + let UC_X86_INS_JNO = 270 + let UC_X86_INS_JNP = 271 + let UC_X86_INS_JNS = 272 + let UC_X86_INS_JO = 273 + let UC_X86_INS_JP = 274 + let UC_X86_INS_JRCXZ = 275 + let UC_X86_INS_JS = 276 + let UC_X86_INS_KANDB = 277 + let UC_X86_INS_KANDD = 278 + let UC_X86_INS_KANDNB = 279 + let UC_X86_INS_KANDND = 280 + let UC_X86_INS_KANDNQ = 281 + let UC_X86_INS_KANDNW = 282 + let UC_X86_INS_KANDQ = 283 + let UC_X86_INS_KANDW = 284 + let UC_X86_INS_KMOVB = 285 + let UC_X86_INS_KMOVD = 286 + let UC_X86_INS_KMOVQ = 287 + let UC_X86_INS_KMOVW = 288 + let UC_X86_INS_KNOTB = 289 + let UC_X86_INS_KNOTD = 290 + let UC_X86_INS_KNOTQ = 291 + let UC_X86_INS_KNOTW = 292 + let UC_X86_INS_KORB = 293 + let UC_X86_INS_KORD = 294 + let UC_X86_INS_KORQ = 295 + let UC_X86_INS_KORTESTB = 296 + let UC_X86_INS_KORTESTD = 297 + let UC_X86_INS_KORTESTQ = 298 + let UC_X86_INS_KORTESTW = 299 + let UC_X86_INS_KORW = 300 + let UC_X86_INS_KSHIFTLB = 301 + let UC_X86_INS_KSHIFTLD = 302 + let UC_X86_INS_KSHIFTLQ = 303 + let UC_X86_INS_KSHIFTLW = 304 + let UC_X86_INS_KSHIFTRB = 305 + let UC_X86_INS_KSHIFTRD = 306 + let UC_X86_INS_KSHIFTRQ = 307 + let UC_X86_INS_KSHIFTRW = 308 + let UC_X86_INS_KUNPCKBW = 309 + let UC_X86_INS_KXNORB = 310 + let UC_X86_INS_KXNORD = 311 + let UC_X86_INS_KXNORQ = 312 + let UC_X86_INS_KXNORW = 313 + let UC_X86_INS_KXORB = 314 + let UC_X86_INS_KXORD = 315 + let UC_X86_INS_KXORQ = 316 + let UC_X86_INS_KXORW = 317 + let UC_X86_INS_LAHF = 318 + let UC_X86_INS_LAR = 319 + let UC_X86_INS_LDDQU = 320 + let UC_X86_INS_LDMXCSR = 321 + let UC_X86_INS_LDS = 322 + let UC_X86_INS_FLDZ = 323 + let UC_X86_INS_FLD1 = 324 + let UC_X86_INS_FLD = 325 + let UC_X86_INS_LEA = 326 + let UC_X86_INS_LEAVE = 327 + let UC_X86_INS_LES = 328 + let UC_X86_INS_LFENCE = 329 + let UC_X86_INS_LFS = 330 + let UC_X86_INS_LGDT = 331 + let UC_X86_INS_LGS = 332 + let UC_X86_INS_LIDT = 333 + let UC_X86_INS_LLDT = 334 + let UC_X86_INS_LMSW = 335 + let UC_X86_INS_OR = 336 + let UC_X86_INS_SUB = 337 + let UC_X86_INS_XOR = 338 + let UC_X86_INS_LODSB = 339 + let UC_X86_INS_LODSD = 340 + let UC_X86_INS_LODSQ = 341 + let UC_X86_INS_LODSW = 342 + let UC_X86_INS_LOOP = 343 + let UC_X86_INS_LOOPE = 344 + let UC_X86_INS_LOOPNE = 345 + let UC_X86_INS_RETF = 346 + let UC_X86_INS_RETFQ = 347 + let UC_X86_INS_LSL = 348 + let UC_X86_INS_LSS = 349 + let UC_X86_INS_LTR = 350 + let UC_X86_INS_XADD = 351 + let UC_X86_INS_LZCNT = 352 + let UC_X86_INS_MASKMOVDQU = 353 + let UC_X86_INS_MAXPD = 354 + let UC_X86_INS_MAXPS = 355 + let UC_X86_INS_MAXSD = 356 + let UC_X86_INS_MAXSS = 357 + let UC_X86_INS_MFENCE = 358 + let UC_X86_INS_MINPD = 359 + let UC_X86_INS_MINPS = 360 + let UC_X86_INS_MINSD = 361 + let UC_X86_INS_MINSS = 362 + let UC_X86_INS_CVTPD2PI = 363 + let UC_X86_INS_CVTPI2PD = 364 + let UC_X86_INS_CVTPI2PS = 365 + let UC_X86_INS_CVTPS2PI = 366 + let UC_X86_INS_CVTTPD2PI = 367 + let UC_X86_INS_CVTTPS2PI = 368 + let UC_X86_INS_EMMS = 369 + let UC_X86_INS_MASKMOVQ = 370 + let UC_X86_INS_MOVD = 371 + let UC_X86_INS_MOVDQ2Q = 372 + let UC_X86_INS_MOVNTQ = 373 + let UC_X86_INS_MOVQ2DQ = 374 + let UC_X86_INS_MOVQ = 375 + let UC_X86_INS_PABSB = 376 + let UC_X86_INS_PABSD = 377 + let UC_X86_INS_PABSW = 378 + let UC_X86_INS_PACKSSDW = 379 + let UC_X86_INS_PACKSSWB = 380 + let UC_X86_INS_PACKUSWB = 381 + let UC_X86_INS_PADDB = 382 + let UC_X86_INS_PADDD = 383 + let UC_X86_INS_PADDQ = 384 + let UC_X86_INS_PADDSB = 385 + let UC_X86_INS_PADDSW = 386 + let UC_X86_INS_PADDUSB = 387 + let UC_X86_INS_PADDUSW = 388 + let UC_X86_INS_PADDW = 389 + let UC_X86_INS_PALIGNR = 390 + let UC_X86_INS_PANDN = 391 + let UC_X86_INS_PAND = 392 + let UC_X86_INS_PAVGB = 393 + let UC_X86_INS_PAVGW = 394 + let UC_X86_INS_PCMPEQB = 395 + let UC_X86_INS_PCMPEQD = 396 + let UC_X86_INS_PCMPEQW = 397 + let UC_X86_INS_PCMPGTB = 398 + let UC_X86_INS_PCMPGTD = 399 + let UC_X86_INS_PCMPGTW = 400 + let UC_X86_INS_PEXTRW = 401 + let UC_X86_INS_PHADDSW = 402 + let UC_X86_INS_PHADDW = 403 + let UC_X86_INS_PHADDD = 404 + let UC_X86_INS_PHSUBD = 405 + let UC_X86_INS_PHSUBSW = 406 + let UC_X86_INS_PHSUBW = 407 + let UC_X86_INS_PINSRW = 408 + let UC_X86_INS_PMADDUBSW = 409 + let UC_X86_INS_PMADDWD = 410 + let UC_X86_INS_PMAXSW = 411 + let UC_X86_INS_PMAXUB = 412 + let UC_X86_INS_PMINSW = 413 + let UC_X86_INS_PMINUB = 414 + let UC_X86_INS_PMOVMSKB = 415 + let UC_X86_INS_PMULHRSW = 416 + let UC_X86_INS_PMULHUW = 417 + let UC_X86_INS_PMULHW = 418 + let UC_X86_INS_PMULLW = 419 + let UC_X86_INS_PMULUDQ = 420 + let UC_X86_INS_POR = 421 + let UC_X86_INS_PSADBW = 422 + let UC_X86_INS_PSHUFB = 423 + let UC_X86_INS_PSHUFW = 424 + let UC_X86_INS_PSIGNB = 425 + let UC_X86_INS_PSIGND = 426 + let UC_X86_INS_PSIGNW = 427 + let UC_X86_INS_PSLLD = 428 + let UC_X86_INS_PSLLQ = 429 + let UC_X86_INS_PSLLW = 430 + let UC_X86_INS_PSRAD = 431 + let UC_X86_INS_PSRAW = 432 + let UC_X86_INS_PSRLD = 433 + let UC_X86_INS_PSRLQ = 434 + let UC_X86_INS_PSRLW = 435 + let UC_X86_INS_PSUBB = 436 + let UC_X86_INS_PSUBD = 437 + let UC_X86_INS_PSUBQ = 438 + let UC_X86_INS_PSUBSB = 439 + let UC_X86_INS_PSUBSW = 440 + let UC_X86_INS_PSUBUSB = 441 + let UC_X86_INS_PSUBUSW = 442 + let UC_X86_INS_PSUBW = 443 + let UC_X86_INS_PUNPCKHBW = 444 + let UC_X86_INS_PUNPCKHDQ = 445 + let UC_X86_INS_PUNPCKHWD = 446 + let UC_X86_INS_PUNPCKLBW = 447 + let UC_X86_INS_PUNPCKLDQ = 448 + let UC_X86_INS_PUNPCKLWD = 449 + let UC_X86_INS_PXOR = 450 + let UC_X86_INS_MONITOR = 451 + let UC_X86_INS_MONTMUL = 452 + let UC_X86_INS_MOV = 453 + let UC_X86_INS_MOVABS = 454 + let UC_X86_INS_MOVBE = 455 + let UC_X86_INS_MOVDDUP = 456 + let UC_X86_INS_MOVDQA = 457 + let UC_X86_INS_MOVDQU = 458 + let UC_X86_INS_MOVHLPS = 459 + let UC_X86_INS_MOVHPD = 460 + let UC_X86_INS_MOVHPS = 461 + let UC_X86_INS_MOVLHPS = 462 + let UC_X86_INS_MOVLPD = 463 + let UC_X86_INS_MOVLPS = 464 + let UC_X86_INS_MOVMSKPD = 465 + let UC_X86_INS_MOVMSKPS = 466 + let UC_X86_INS_MOVNTDQA = 467 + let UC_X86_INS_MOVNTDQ = 468 + let UC_X86_INS_MOVNTI = 469 + let UC_X86_INS_MOVNTPD = 470 + let UC_X86_INS_MOVNTPS = 471 + let UC_X86_INS_MOVNTSD = 472 + let UC_X86_INS_MOVNTSS = 473 + let UC_X86_INS_MOVSB = 474 + let UC_X86_INS_MOVSD = 475 + let UC_X86_INS_MOVSHDUP = 476 + let UC_X86_INS_MOVSLDUP = 477 + let UC_X86_INS_MOVSQ = 478 + let UC_X86_INS_MOVSS = 479 + let UC_X86_INS_MOVSW = 480 + let UC_X86_INS_MOVSX = 481 + let UC_X86_INS_MOVSXD = 482 + let UC_X86_INS_MOVUPD = 483 + let UC_X86_INS_MOVUPS = 484 + let UC_X86_INS_MOVZX = 485 + let UC_X86_INS_MPSADBW = 486 + let UC_X86_INS_MUL = 487 + let UC_X86_INS_MULPD = 488 + let UC_X86_INS_MULPS = 489 + let UC_X86_INS_MULSD = 490 + let UC_X86_INS_MULSS = 491 + let UC_X86_INS_MULX = 492 + let UC_X86_INS_FMUL = 493 + let UC_X86_INS_FIMUL = 494 + let UC_X86_INS_FMULP = 495 + let UC_X86_INS_MWAIT = 496 + let UC_X86_INS_NEG = 497 + let UC_X86_INS_NOP = 498 + let UC_X86_INS_NOT = 499 + let UC_X86_INS_OUT = 500 + let UC_X86_INS_OUTSB = 501 + let UC_X86_INS_OUTSD = 502 + let UC_X86_INS_OUTSW = 503 + let UC_X86_INS_PACKUSDW = 504 + let UC_X86_INS_PAUSE = 505 + let UC_X86_INS_PAVGUSB = 506 + let UC_X86_INS_PBLENDVB = 507 + let UC_X86_INS_PBLENDW = 508 + let UC_X86_INS_PCLMULQDQ = 509 + let UC_X86_INS_PCMPEQQ = 510 + let UC_X86_INS_PCMPESTRI = 511 + let UC_X86_INS_PCMPESTRM = 512 + let UC_X86_INS_PCMPGTQ = 513 + let UC_X86_INS_PCMPISTRI = 514 + let UC_X86_INS_PCMPISTRM = 515 + let UC_X86_INS_PCOMMIT = 516 + let UC_X86_INS_PDEP = 517 + let UC_X86_INS_PEXT = 518 + let UC_X86_INS_PEXTRB = 519 + let UC_X86_INS_PEXTRD = 520 + let UC_X86_INS_PEXTRQ = 521 + let UC_X86_INS_PF2ID = 522 + let UC_X86_INS_PF2IW = 523 + let UC_X86_INS_PFACC = 524 + let UC_X86_INS_PFADD = 525 + let UC_X86_INS_PFCMPEQ = 526 + let UC_X86_INS_PFCMPGE = 527 + let UC_X86_INS_PFCMPGT = 528 + let UC_X86_INS_PFMAX = 529 + let UC_X86_INS_PFMIN = 530 + let UC_X86_INS_PFMUL = 531 + let UC_X86_INS_PFNACC = 532 + let UC_X86_INS_PFPNACC = 533 + let UC_X86_INS_PFRCPIT1 = 534 + let UC_X86_INS_PFRCPIT2 = 535 + let UC_X86_INS_PFRCP = 536 + let UC_X86_INS_PFRSQIT1 = 537 + let UC_X86_INS_PFRSQRT = 538 + let UC_X86_INS_PFSUBR = 539 + let UC_X86_INS_PFSUB = 540 + let UC_X86_INS_PHMINPOSUW = 541 + let UC_X86_INS_PI2FD = 542 + let UC_X86_INS_PI2FW = 543 + let UC_X86_INS_PINSRB = 544 + let UC_X86_INS_PINSRD = 545 + let UC_X86_INS_PINSRQ = 546 + let UC_X86_INS_PMAXSB = 547 + let UC_X86_INS_PMAXSD = 548 + let UC_X86_INS_PMAXUD = 549 + let UC_X86_INS_PMAXUW = 550 + let UC_X86_INS_PMINSB = 551 + let UC_X86_INS_PMINSD = 552 + let UC_X86_INS_PMINUD = 553 + let UC_X86_INS_PMINUW = 554 + let UC_X86_INS_PMOVSXBD = 555 + let UC_X86_INS_PMOVSXBQ = 556 + let UC_X86_INS_PMOVSXBW = 557 + let UC_X86_INS_PMOVSXDQ = 558 + let UC_X86_INS_PMOVSXWD = 559 + let UC_X86_INS_PMOVSXWQ = 560 + let UC_X86_INS_PMOVZXBD = 561 + let UC_X86_INS_PMOVZXBQ = 562 + let UC_X86_INS_PMOVZXBW = 563 + let UC_X86_INS_PMOVZXDQ = 564 + let UC_X86_INS_PMOVZXWD = 565 + let UC_X86_INS_PMOVZXWQ = 566 + let UC_X86_INS_PMULDQ = 567 + let UC_X86_INS_PMULHRW = 568 + let UC_X86_INS_PMULLD = 569 + let UC_X86_INS_POP = 570 + let UC_X86_INS_POPAW = 571 + let UC_X86_INS_POPAL = 572 + let UC_X86_INS_POPCNT = 573 + let UC_X86_INS_POPF = 574 + let UC_X86_INS_POPFD = 575 + let UC_X86_INS_POPFQ = 576 + let UC_X86_INS_PREFETCH = 577 + let UC_X86_INS_PREFETCHNTA = 578 + let UC_X86_INS_PREFETCHT0 = 579 + let UC_X86_INS_PREFETCHT1 = 580 + let UC_X86_INS_PREFETCHT2 = 581 + let UC_X86_INS_PREFETCHW = 582 + let UC_X86_INS_PSHUFD = 583 + let UC_X86_INS_PSHUFHW = 584 + let UC_X86_INS_PSHUFLW = 585 + let UC_X86_INS_PSLLDQ = 586 + let UC_X86_INS_PSRLDQ = 587 + let UC_X86_INS_PSWAPD = 588 + let UC_X86_INS_PTEST = 589 + let UC_X86_INS_PUNPCKHQDQ = 590 + let UC_X86_INS_PUNPCKLQDQ = 591 + let UC_X86_INS_PUSH = 592 + let UC_X86_INS_PUSHAW = 593 + let UC_X86_INS_PUSHAL = 594 + let UC_X86_INS_PUSHF = 595 + let UC_X86_INS_PUSHFD = 596 + let UC_X86_INS_PUSHFQ = 597 + let UC_X86_INS_RCL = 598 + let UC_X86_INS_RCPPS = 599 + let UC_X86_INS_RCPSS = 600 + let UC_X86_INS_RCR = 601 + let UC_X86_INS_RDFSBASE = 602 + let UC_X86_INS_RDGSBASE = 603 + let UC_X86_INS_RDMSR = 604 + let UC_X86_INS_RDPMC = 605 + let UC_X86_INS_RDRAND = 606 + let UC_X86_INS_RDSEED = 607 + let UC_X86_INS_RDTSC = 608 + let UC_X86_INS_RDTSCP = 609 + let UC_X86_INS_ROL = 610 + let UC_X86_INS_ROR = 611 + let UC_X86_INS_RORX = 612 + let UC_X86_INS_ROUNDPD = 613 + let UC_X86_INS_ROUNDPS = 614 + let UC_X86_INS_ROUNDSD = 615 + let UC_X86_INS_ROUNDSS = 616 + let UC_X86_INS_RSM = 617 + let UC_X86_INS_RSQRTPS = 618 + let UC_X86_INS_RSQRTSS = 619 + let UC_X86_INS_SAHF = 620 + let UC_X86_INS_SAL = 621 + let UC_X86_INS_SALC = 622 + let UC_X86_INS_SAR = 623 + let UC_X86_INS_SARX = 624 + let UC_X86_INS_SBB = 625 + let UC_X86_INS_SCASB = 626 + let UC_X86_INS_SCASD = 627 + let UC_X86_INS_SCASQ = 628 + let UC_X86_INS_SCASW = 629 + let UC_X86_INS_SETAE = 630 + let UC_X86_INS_SETA = 631 + let UC_X86_INS_SETBE = 632 + let UC_X86_INS_SETB = 633 + let UC_X86_INS_SETE = 634 + let UC_X86_INS_SETGE = 635 + let UC_X86_INS_SETG = 636 + let UC_X86_INS_SETLE = 637 + let UC_X86_INS_SETL = 638 + let UC_X86_INS_SETNE = 639 + let UC_X86_INS_SETNO = 640 + let UC_X86_INS_SETNP = 641 + let UC_X86_INS_SETNS = 642 + let UC_X86_INS_SETO = 643 + let UC_X86_INS_SETP = 644 + let UC_X86_INS_SETS = 645 + let UC_X86_INS_SFENCE = 646 + let UC_X86_INS_SGDT = 647 + let UC_X86_INS_SHA1MSG1 = 648 + let UC_X86_INS_SHA1MSG2 = 649 + let UC_X86_INS_SHA1NEXTE = 650 + let UC_X86_INS_SHA1RNDS4 = 651 + let UC_X86_INS_SHA256MSG1 = 652 + let UC_X86_INS_SHA256MSG2 = 653 + let UC_X86_INS_SHA256RNDS2 = 654 + let UC_X86_INS_SHL = 655 + let UC_X86_INS_SHLD = 656 + let UC_X86_INS_SHLX = 657 + let UC_X86_INS_SHR = 658 + let UC_X86_INS_SHRD = 659 + let UC_X86_INS_SHRX = 660 + let UC_X86_INS_SHUFPD = 661 + let UC_X86_INS_SHUFPS = 662 + let UC_X86_INS_SIDT = 663 + let UC_X86_INS_FSIN = 664 + let UC_X86_INS_SKINIT = 665 + let UC_X86_INS_SLDT = 666 + let UC_X86_INS_SMSW = 667 + let UC_X86_INS_SQRTPD = 668 + let UC_X86_INS_SQRTPS = 669 + let UC_X86_INS_SQRTSD = 670 + let UC_X86_INS_SQRTSS = 671 + let UC_X86_INS_FSQRT = 672 + let UC_X86_INS_STAC = 673 + let UC_X86_INS_STC = 674 + let UC_X86_INS_STD = 675 + let UC_X86_INS_STGI = 676 + let UC_X86_INS_STI = 677 + let UC_X86_INS_STMXCSR = 678 + let UC_X86_INS_STOSB = 679 + let UC_X86_INS_STOSD = 680 + let UC_X86_INS_STOSQ = 681 + let UC_X86_INS_STOSW = 682 + let UC_X86_INS_STR = 683 + let UC_X86_INS_FST = 684 + let UC_X86_INS_FSTP = 685 + let UC_X86_INS_FSTPNCE = 686 + let UC_X86_INS_FXCH = 687 + let UC_X86_INS_SUBPD = 688 + let UC_X86_INS_SUBPS = 689 + let UC_X86_INS_FSUBR = 690 + let UC_X86_INS_FISUBR = 691 + let UC_X86_INS_FSUBRP = 692 + let UC_X86_INS_SUBSD = 693 + let UC_X86_INS_SUBSS = 694 + let UC_X86_INS_FSUB = 695 + let UC_X86_INS_FISUB = 696 + let UC_X86_INS_FSUBP = 697 + let UC_X86_INS_SWAPGS = 698 + let UC_X86_INS_SYSCALL = 699 + let UC_X86_INS_SYSENTER = 700 + let UC_X86_INS_SYSEXIT = 701 + let UC_X86_INS_SYSRET = 702 + let UC_X86_INS_T1MSKC = 703 + let UC_X86_INS_TEST = 704 + let UC_X86_INS_UD2 = 705 + let UC_X86_INS_FTST = 706 + let UC_X86_INS_TZCNT = 707 + let UC_X86_INS_TZMSK = 708 + let UC_X86_INS_FUCOMPI = 709 + let UC_X86_INS_FUCOMI = 710 + let UC_X86_INS_FUCOMPP = 711 + let UC_X86_INS_FUCOMP = 712 + let UC_X86_INS_FUCOM = 713 + let UC_X86_INS_UD2B = 714 + let UC_X86_INS_UNPCKHPD = 715 + let UC_X86_INS_UNPCKHPS = 716 + let UC_X86_INS_UNPCKLPD = 717 + let UC_X86_INS_UNPCKLPS = 718 + let UC_X86_INS_VADDPD = 719 + let UC_X86_INS_VADDPS = 720 + let UC_X86_INS_VADDSD = 721 + let UC_X86_INS_VADDSS = 722 + let UC_X86_INS_VADDSUBPD = 723 + let UC_X86_INS_VADDSUBPS = 724 + let UC_X86_INS_VAESDECLAST = 725 + let UC_X86_INS_VAESDEC = 726 + let UC_X86_INS_VAESENCLAST = 727 + let UC_X86_INS_VAESENC = 728 + let UC_X86_INS_VAESIMC = 729 + let UC_X86_INS_VAESKEYGENASSIST = 730 + let UC_X86_INS_VALIGND = 731 + let UC_X86_INS_VALIGNQ = 732 + let UC_X86_INS_VANDNPD = 733 + let UC_X86_INS_VANDNPS = 734 + let UC_X86_INS_VANDPD = 735 + let UC_X86_INS_VANDPS = 736 + let UC_X86_INS_VBLENDMPD = 737 + let UC_X86_INS_VBLENDMPS = 738 + let UC_X86_INS_VBLENDPD = 739 + let UC_X86_INS_VBLENDPS = 740 + let UC_X86_INS_VBLENDVPD = 741 + let UC_X86_INS_VBLENDVPS = 742 + let UC_X86_INS_VBROADCASTF128 = 743 + let UC_X86_INS_VBROADCASTI32X4 = 744 + let UC_X86_INS_VBROADCASTI64X4 = 745 + let UC_X86_INS_VBROADCASTSD = 746 + let UC_X86_INS_VBROADCASTSS = 747 + let UC_X86_INS_VCMPPD = 748 + let UC_X86_INS_VCMPPS = 749 + let UC_X86_INS_VCMPSD = 750 + let UC_X86_INS_VCMPSS = 751 + let UC_X86_INS_VCOMPRESSPD = 752 + let UC_X86_INS_VCOMPRESSPS = 753 + let UC_X86_INS_VCVTDQ2PD = 754 + let UC_X86_INS_VCVTDQ2PS = 755 + let UC_X86_INS_VCVTPD2DQX = 756 + let UC_X86_INS_VCVTPD2DQ = 757 + let UC_X86_INS_VCVTPD2PSX = 758 + let UC_X86_INS_VCVTPD2PS = 759 + let UC_X86_INS_VCVTPD2UDQ = 760 + let UC_X86_INS_VCVTPH2PS = 761 + let UC_X86_INS_VCVTPS2DQ = 762 + let UC_X86_INS_VCVTPS2PD = 763 + let UC_X86_INS_VCVTPS2PH = 764 + let UC_X86_INS_VCVTPS2UDQ = 765 + let UC_X86_INS_VCVTSD2SI = 766 + let UC_X86_INS_VCVTSD2USI = 767 + let UC_X86_INS_VCVTSS2SI = 768 + let UC_X86_INS_VCVTSS2USI = 769 + let UC_X86_INS_VCVTTPD2DQX = 770 + let UC_X86_INS_VCVTTPD2DQ = 771 + let UC_X86_INS_VCVTTPD2UDQ = 772 + let UC_X86_INS_VCVTTPS2DQ = 773 + let UC_X86_INS_VCVTTPS2UDQ = 774 + let UC_X86_INS_VCVTUDQ2PD = 775 + let UC_X86_INS_VCVTUDQ2PS = 776 + let UC_X86_INS_VDIVPD = 777 + let UC_X86_INS_VDIVPS = 778 + let UC_X86_INS_VDIVSD = 779 + let UC_X86_INS_VDIVSS = 780 + let UC_X86_INS_VDPPD = 781 + let UC_X86_INS_VDPPS = 782 + let UC_X86_INS_VERR = 783 + let UC_X86_INS_VERW = 784 + let UC_X86_INS_VEXP2PD = 785 + let UC_X86_INS_VEXP2PS = 786 + let UC_X86_INS_VEXPANDPD = 787 + let UC_X86_INS_VEXPANDPS = 788 + let UC_X86_INS_VEXTRACTF128 = 789 + let UC_X86_INS_VEXTRACTF32X4 = 790 + let UC_X86_INS_VEXTRACTF64X4 = 791 + let UC_X86_INS_VEXTRACTI128 = 792 + let UC_X86_INS_VEXTRACTI32X4 = 793 + let UC_X86_INS_VEXTRACTI64X4 = 794 + let UC_X86_INS_VEXTRACTPS = 795 + let UC_X86_INS_VFMADD132PD = 796 + let UC_X86_INS_VFMADD132PS = 797 + let UC_X86_INS_VFMADDPD = 798 + let UC_X86_INS_VFMADD213PD = 799 + let UC_X86_INS_VFMADD231PD = 800 + let UC_X86_INS_VFMADDPS = 801 + let UC_X86_INS_VFMADD213PS = 802 + let UC_X86_INS_VFMADD231PS = 803 + let UC_X86_INS_VFMADDSD = 804 + let UC_X86_INS_VFMADD213SD = 805 + let UC_X86_INS_VFMADD132SD = 806 + let UC_X86_INS_VFMADD231SD = 807 + let UC_X86_INS_VFMADDSS = 808 + let UC_X86_INS_VFMADD213SS = 809 + let UC_X86_INS_VFMADD132SS = 810 + let UC_X86_INS_VFMADD231SS = 811 + let UC_X86_INS_VFMADDSUB132PD = 812 + let UC_X86_INS_VFMADDSUB132PS = 813 + let UC_X86_INS_VFMADDSUBPD = 814 + let UC_X86_INS_VFMADDSUB213PD = 815 + let UC_X86_INS_VFMADDSUB231PD = 816 + let UC_X86_INS_VFMADDSUBPS = 817 + let UC_X86_INS_VFMADDSUB213PS = 818 + let UC_X86_INS_VFMADDSUB231PS = 819 + let UC_X86_INS_VFMSUB132PD = 820 + let UC_X86_INS_VFMSUB132PS = 821 + let UC_X86_INS_VFMSUBADD132PD = 822 + let UC_X86_INS_VFMSUBADD132PS = 823 + let UC_X86_INS_VFMSUBADDPD = 824 + let UC_X86_INS_VFMSUBADD213PD = 825 + let UC_X86_INS_VFMSUBADD231PD = 826 + let UC_X86_INS_VFMSUBADDPS = 827 + let UC_X86_INS_VFMSUBADD213PS = 828 + let UC_X86_INS_VFMSUBADD231PS = 829 + let UC_X86_INS_VFMSUBPD = 830 + let UC_X86_INS_VFMSUB213PD = 831 + let UC_X86_INS_VFMSUB231PD = 832 + let UC_X86_INS_VFMSUBPS = 833 + let UC_X86_INS_VFMSUB213PS = 834 + let UC_X86_INS_VFMSUB231PS = 835 + let UC_X86_INS_VFMSUBSD = 836 + let UC_X86_INS_VFMSUB213SD = 837 + let UC_X86_INS_VFMSUB132SD = 838 + let UC_X86_INS_VFMSUB231SD = 839 + let UC_X86_INS_VFMSUBSS = 840 + let UC_X86_INS_VFMSUB213SS = 841 + let UC_X86_INS_VFMSUB132SS = 842 + let UC_X86_INS_VFMSUB231SS = 843 + let UC_X86_INS_VFNMADD132PD = 844 + let UC_X86_INS_VFNMADD132PS = 845 + let UC_X86_INS_VFNMADDPD = 846 + let UC_X86_INS_VFNMADD213PD = 847 + let UC_X86_INS_VFNMADD231PD = 848 + let UC_X86_INS_VFNMADDPS = 849 + let UC_X86_INS_VFNMADD213PS = 850 + let UC_X86_INS_VFNMADD231PS = 851 + let UC_X86_INS_VFNMADDSD = 852 + let UC_X86_INS_VFNMADD213SD = 853 + let UC_X86_INS_VFNMADD132SD = 854 + let UC_X86_INS_VFNMADD231SD = 855 + let UC_X86_INS_VFNMADDSS = 856 + let UC_X86_INS_VFNMADD213SS = 857 + let UC_X86_INS_VFNMADD132SS = 858 + let UC_X86_INS_VFNMADD231SS = 859 + let UC_X86_INS_VFNMSUB132PD = 860 + let UC_X86_INS_VFNMSUB132PS = 861 + let UC_X86_INS_VFNMSUBPD = 862 + let UC_X86_INS_VFNMSUB213PD = 863 + let UC_X86_INS_VFNMSUB231PD = 864 + let UC_X86_INS_VFNMSUBPS = 865 + let UC_X86_INS_VFNMSUB213PS = 866 + let UC_X86_INS_VFNMSUB231PS = 867 + let UC_X86_INS_VFNMSUBSD = 868 + let UC_X86_INS_VFNMSUB213SD = 869 + let UC_X86_INS_VFNMSUB132SD = 870 + let UC_X86_INS_VFNMSUB231SD = 871 + let UC_X86_INS_VFNMSUBSS = 872 + let UC_X86_INS_VFNMSUB213SS = 873 + let UC_X86_INS_VFNMSUB132SS = 874 + let UC_X86_INS_VFNMSUB231SS = 875 + let UC_X86_INS_VFRCZPD = 876 + let UC_X86_INS_VFRCZPS = 877 + let UC_X86_INS_VFRCZSD = 878 + let UC_X86_INS_VFRCZSS = 879 + let UC_X86_INS_VORPD = 880 + let UC_X86_INS_VORPS = 881 + let UC_X86_INS_VXORPD = 882 + let UC_X86_INS_VXORPS = 883 + let UC_X86_INS_VGATHERDPD = 884 + let UC_X86_INS_VGATHERDPS = 885 + let UC_X86_INS_VGATHERPF0DPD = 886 + let UC_X86_INS_VGATHERPF0DPS = 887 + let UC_X86_INS_VGATHERPF0QPD = 888 + let UC_X86_INS_VGATHERPF0QPS = 889 + let UC_X86_INS_VGATHERPF1DPD = 890 + let UC_X86_INS_VGATHERPF1DPS = 891 + let UC_X86_INS_VGATHERPF1QPD = 892 + let UC_X86_INS_VGATHERPF1QPS = 893 + let UC_X86_INS_VGATHERQPD = 894 + let UC_X86_INS_VGATHERQPS = 895 + let UC_X86_INS_VHADDPD = 896 + let UC_X86_INS_VHADDPS = 897 + let UC_X86_INS_VHSUBPD = 898 + let UC_X86_INS_VHSUBPS = 899 + let UC_X86_INS_VINSERTF128 = 900 + let UC_X86_INS_VINSERTF32X4 = 901 + let UC_X86_INS_VINSERTF32X8 = 902 + let UC_X86_INS_VINSERTF64X2 = 903 + let UC_X86_INS_VINSERTF64X4 = 904 + let UC_X86_INS_VINSERTI128 = 905 + let UC_X86_INS_VINSERTI32X4 = 906 + let UC_X86_INS_VINSERTI32X8 = 907 + let UC_X86_INS_VINSERTI64X2 = 908 + let UC_X86_INS_VINSERTI64X4 = 909 + let UC_X86_INS_VINSERTPS = 910 + let UC_X86_INS_VLDDQU = 911 + let UC_X86_INS_VLDMXCSR = 912 + let UC_X86_INS_VMASKMOVDQU = 913 + let UC_X86_INS_VMASKMOVPD = 914 + let UC_X86_INS_VMASKMOVPS = 915 + let UC_X86_INS_VMAXPD = 916 + let UC_X86_INS_VMAXPS = 917 + let UC_X86_INS_VMAXSD = 918 + let UC_X86_INS_VMAXSS = 919 + let UC_X86_INS_VMCALL = 920 + let UC_X86_INS_VMCLEAR = 921 + let UC_X86_INS_VMFUNC = 922 + let UC_X86_INS_VMINPD = 923 + let UC_X86_INS_VMINPS = 924 + let UC_X86_INS_VMINSD = 925 + let UC_X86_INS_VMINSS = 926 + let UC_X86_INS_VMLAUNCH = 927 + let UC_X86_INS_VMLOAD = 928 + let UC_X86_INS_VMMCALL = 929 + let UC_X86_INS_VMOVQ = 930 + let UC_X86_INS_VMOVDDUP = 931 + let UC_X86_INS_VMOVD = 932 + let UC_X86_INS_VMOVDQA32 = 933 + let UC_X86_INS_VMOVDQA64 = 934 + let UC_X86_INS_VMOVDQA = 935 + let UC_X86_INS_VMOVDQU16 = 936 + let UC_X86_INS_VMOVDQU32 = 937 + let UC_X86_INS_VMOVDQU64 = 938 + let UC_X86_INS_VMOVDQU8 = 939 + let UC_X86_INS_VMOVDQU = 940 + let UC_X86_INS_VMOVHLPS = 941 + let UC_X86_INS_VMOVHPD = 942 + let UC_X86_INS_VMOVHPS = 943 + let UC_X86_INS_VMOVLHPS = 944 + let UC_X86_INS_VMOVLPD = 945 + let UC_X86_INS_VMOVLPS = 946 + let UC_X86_INS_VMOVMSKPD = 947 + let UC_X86_INS_VMOVMSKPS = 948 + let UC_X86_INS_VMOVNTDQA = 949 + let UC_X86_INS_VMOVNTDQ = 950 + let UC_X86_INS_VMOVNTPD = 951 + let UC_X86_INS_VMOVNTPS = 952 + let UC_X86_INS_VMOVSD = 953 + let UC_X86_INS_VMOVSHDUP = 954 + let UC_X86_INS_VMOVSLDUP = 955 + let UC_X86_INS_VMOVSS = 956 + let UC_X86_INS_VMOVUPD = 957 + let UC_X86_INS_VMOVUPS = 958 + let UC_X86_INS_VMPSADBW = 959 + let UC_X86_INS_VMPTRLD = 960 + let UC_X86_INS_VMPTRST = 961 + let UC_X86_INS_VMREAD = 962 + let UC_X86_INS_VMRESUME = 963 + let UC_X86_INS_VMRUN = 964 + let UC_X86_INS_VMSAVE = 965 + let UC_X86_INS_VMULPD = 966 + let UC_X86_INS_VMULPS = 967 + let UC_X86_INS_VMULSD = 968 + let UC_X86_INS_VMULSS = 969 + let UC_X86_INS_VMWRITE = 970 + let UC_X86_INS_VMXOFF = 971 + let UC_X86_INS_VMXON = 972 + let UC_X86_INS_VPABSB = 973 + let UC_X86_INS_VPABSD = 974 + let UC_X86_INS_VPABSQ = 975 + let UC_X86_INS_VPABSW = 976 + let UC_X86_INS_VPACKSSDW = 977 + let UC_X86_INS_VPACKSSWB = 978 + let UC_X86_INS_VPACKUSDW = 979 + let UC_X86_INS_VPACKUSWB = 980 + let UC_X86_INS_VPADDB = 981 + let UC_X86_INS_VPADDD = 982 + let UC_X86_INS_VPADDQ = 983 + let UC_X86_INS_VPADDSB = 984 + let UC_X86_INS_VPADDSW = 985 + let UC_X86_INS_VPADDUSB = 986 + let UC_X86_INS_VPADDUSW = 987 + let UC_X86_INS_VPADDW = 988 + let UC_X86_INS_VPALIGNR = 989 + let UC_X86_INS_VPANDD = 990 + let UC_X86_INS_VPANDND = 991 + let UC_X86_INS_VPANDNQ = 992 + let UC_X86_INS_VPANDN = 993 + let UC_X86_INS_VPANDQ = 994 + let UC_X86_INS_VPAND = 995 + let UC_X86_INS_VPAVGB = 996 + let UC_X86_INS_VPAVGW = 997 + let UC_X86_INS_VPBLENDD = 998 + let UC_X86_INS_VPBLENDMB = 999 + let UC_X86_INS_VPBLENDMD = 1000 + let UC_X86_INS_VPBLENDMQ = 1001 + let UC_X86_INS_VPBLENDMW = 1002 + let UC_X86_INS_VPBLENDVB = 1003 + let UC_X86_INS_VPBLENDW = 1004 + let UC_X86_INS_VPBROADCASTB = 1005 + let UC_X86_INS_VPBROADCASTD = 1006 + let UC_X86_INS_VPBROADCASTMB2Q = 1007 + let UC_X86_INS_VPBROADCASTMW2D = 1008 + let UC_X86_INS_VPBROADCASTQ = 1009 + let UC_X86_INS_VPBROADCASTW = 1010 + let UC_X86_INS_VPCLMULQDQ = 1011 + let UC_X86_INS_VPCMOV = 1012 + let UC_X86_INS_VPCMPB = 1013 + let UC_X86_INS_VPCMPD = 1014 + let UC_X86_INS_VPCMPEQB = 1015 + let UC_X86_INS_VPCMPEQD = 1016 + let UC_X86_INS_VPCMPEQQ = 1017 + let UC_X86_INS_VPCMPEQW = 1018 + let UC_X86_INS_VPCMPESTRI = 1019 + let UC_X86_INS_VPCMPESTRM = 1020 + let UC_X86_INS_VPCMPGTB = 1021 + let UC_X86_INS_VPCMPGTD = 1022 + let UC_X86_INS_VPCMPGTQ = 1023 + let UC_X86_INS_VPCMPGTW = 1024 + let UC_X86_INS_VPCMPISTRI = 1025 + let UC_X86_INS_VPCMPISTRM = 1026 + let UC_X86_INS_VPCMPQ = 1027 + let UC_X86_INS_VPCMPUB = 1028 + let UC_X86_INS_VPCMPUD = 1029 + let UC_X86_INS_VPCMPUQ = 1030 + let UC_X86_INS_VPCMPUW = 1031 + let UC_X86_INS_VPCMPW = 1032 + let UC_X86_INS_VPCOMB = 1033 + let UC_X86_INS_VPCOMD = 1034 + let UC_X86_INS_VPCOMPRESSD = 1035 + let UC_X86_INS_VPCOMPRESSQ = 1036 + let UC_X86_INS_VPCOMQ = 1037 + let UC_X86_INS_VPCOMUB = 1038 + let UC_X86_INS_VPCOMUD = 1039 + let UC_X86_INS_VPCOMUQ = 1040 + let UC_X86_INS_VPCOMUW = 1041 + let UC_X86_INS_VPCOMW = 1042 + let UC_X86_INS_VPCONFLICTD = 1043 + let UC_X86_INS_VPCONFLICTQ = 1044 + let UC_X86_INS_VPERM2F128 = 1045 + let UC_X86_INS_VPERM2I128 = 1046 + let UC_X86_INS_VPERMD = 1047 + let UC_X86_INS_VPERMI2D = 1048 + let UC_X86_INS_VPERMI2PD = 1049 + let UC_X86_INS_VPERMI2PS = 1050 + let UC_X86_INS_VPERMI2Q = 1051 + let UC_X86_INS_VPERMIL2PD = 1052 + let UC_X86_INS_VPERMIL2PS = 1053 + let UC_X86_INS_VPERMILPD = 1054 + let UC_X86_INS_VPERMILPS = 1055 + let UC_X86_INS_VPERMPD = 1056 + let UC_X86_INS_VPERMPS = 1057 + let UC_X86_INS_VPERMQ = 1058 + let UC_X86_INS_VPERMT2D = 1059 + let UC_X86_INS_VPERMT2PD = 1060 + let UC_X86_INS_VPERMT2PS = 1061 + let UC_X86_INS_VPERMT2Q = 1062 + let UC_X86_INS_VPEXPANDD = 1063 + let UC_X86_INS_VPEXPANDQ = 1064 + let UC_X86_INS_VPEXTRB = 1065 + let UC_X86_INS_VPEXTRD = 1066 + let UC_X86_INS_VPEXTRQ = 1067 + let UC_X86_INS_VPEXTRW = 1068 + let UC_X86_INS_VPGATHERDD = 1069 + let UC_X86_INS_VPGATHERDQ = 1070 + let UC_X86_INS_VPGATHERQD = 1071 + let UC_X86_INS_VPGATHERQQ = 1072 + let UC_X86_INS_VPHADDBD = 1073 + let UC_X86_INS_VPHADDBQ = 1074 + let UC_X86_INS_VPHADDBW = 1075 + let UC_X86_INS_VPHADDDQ = 1076 + let UC_X86_INS_VPHADDD = 1077 + let UC_X86_INS_VPHADDSW = 1078 + let UC_X86_INS_VPHADDUBD = 1079 + let UC_X86_INS_VPHADDUBQ = 1080 + let UC_X86_INS_VPHADDUBW = 1081 + let UC_X86_INS_VPHADDUDQ = 1082 + let UC_X86_INS_VPHADDUWD = 1083 + let UC_X86_INS_VPHADDUWQ = 1084 + let UC_X86_INS_VPHADDWD = 1085 + let UC_X86_INS_VPHADDWQ = 1086 + let UC_X86_INS_VPHADDW = 1087 + let UC_X86_INS_VPHMINPOSUW = 1088 + let UC_X86_INS_VPHSUBBW = 1089 + let UC_X86_INS_VPHSUBDQ = 1090 + let UC_X86_INS_VPHSUBD = 1091 + let UC_X86_INS_VPHSUBSW = 1092 + let UC_X86_INS_VPHSUBWD = 1093 + let UC_X86_INS_VPHSUBW = 1094 + let UC_X86_INS_VPINSRB = 1095 + let UC_X86_INS_VPINSRD = 1096 + let UC_X86_INS_VPINSRQ = 1097 + let UC_X86_INS_VPINSRW = 1098 + let UC_X86_INS_VPLZCNTD = 1099 + let UC_X86_INS_VPLZCNTQ = 1100 + let UC_X86_INS_VPMACSDD = 1101 + let UC_X86_INS_VPMACSDQH = 1102 + let UC_X86_INS_VPMACSDQL = 1103 + let UC_X86_INS_VPMACSSDD = 1104 + let UC_X86_INS_VPMACSSDQH = 1105 + let UC_X86_INS_VPMACSSDQL = 1106 + let UC_X86_INS_VPMACSSWD = 1107 + let UC_X86_INS_VPMACSSWW = 1108 + let UC_X86_INS_VPMACSWD = 1109 + let UC_X86_INS_VPMACSWW = 1110 + let UC_X86_INS_VPMADCSSWD = 1111 + let UC_X86_INS_VPMADCSWD = 1112 + let UC_X86_INS_VPMADDUBSW = 1113 + let UC_X86_INS_VPMADDWD = 1114 + let UC_X86_INS_VPMASKMOVD = 1115 + let UC_X86_INS_VPMASKMOVQ = 1116 + let UC_X86_INS_VPMAXSB = 1117 + let UC_X86_INS_VPMAXSD = 1118 + let UC_X86_INS_VPMAXSQ = 1119 + let UC_X86_INS_VPMAXSW = 1120 + let UC_X86_INS_VPMAXUB = 1121 + let UC_X86_INS_VPMAXUD = 1122 + let UC_X86_INS_VPMAXUQ = 1123 + let UC_X86_INS_VPMAXUW = 1124 + let UC_X86_INS_VPMINSB = 1125 + let UC_X86_INS_VPMINSD = 1126 + let UC_X86_INS_VPMINSQ = 1127 + let UC_X86_INS_VPMINSW = 1128 + let UC_X86_INS_VPMINUB = 1129 + let UC_X86_INS_VPMINUD = 1130 + let UC_X86_INS_VPMINUQ = 1131 + let UC_X86_INS_VPMINUW = 1132 + let UC_X86_INS_VPMOVDB = 1133 + let UC_X86_INS_VPMOVDW = 1134 + let UC_X86_INS_VPMOVM2B = 1135 + let UC_X86_INS_VPMOVM2D = 1136 + let UC_X86_INS_VPMOVM2Q = 1137 + let UC_X86_INS_VPMOVM2W = 1138 + let UC_X86_INS_VPMOVMSKB = 1139 + let UC_X86_INS_VPMOVQB = 1140 + let UC_X86_INS_VPMOVQD = 1141 + let UC_X86_INS_VPMOVQW = 1142 + let UC_X86_INS_VPMOVSDB = 1143 + let UC_X86_INS_VPMOVSDW = 1144 + let UC_X86_INS_VPMOVSQB = 1145 + let UC_X86_INS_VPMOVSQD = 1146 + let UC_X86_INS_VPMOVSQW = 1147 + let UC_X86_INS_VPMOVSXBD = 1148 + let UC_X86_INS_VPMOVSXBQ = 1149 + let UC_X86_INS_VPMOVSXBW = 1150 + let UC_X86_INS_VPMOVSXDQ = 1151 + let UC_X86_INS_VPMOVSXWD = 1152 + let UC_X86_INS_VPMOVSXWQ = 1153 + let UC_X86_INS_VPMOVUSDB = 1154 + let UC_X86_INS_VPMOVUSDW = 1155 + let UC_X86_INS_VPMOVUSQB = 1156 + let UC_X86_INS_VPMOVUSQD = 1157 + let UC_X86_INS_VPMOVUSQW = 1158 + let UC_X86_INS_VPMOVZXBD = 1159 + let UC_X86_INS_VPMOVZXBQ = 1160 + let UC_X86_INS_VPMOVZXBW = 1161 + let UC_X86_INS_VPMOVZXDQ = 1162 + let UC_X86_INS_VPMOVZXWD = 1163 + let UC_X86_INS_VPMOVZXWQ = 1164 + let UC_X86_INS_VPMULDQ = 1165 + let UC_X86_INS_VPMULHRSW = 1166 + let UC_X86_INS_VPMULHUW = 1167 + let UC_X86_INS_VPMULHW = 1168 + let UC_X86_INS_VPMULLD = 1169 + let UC_X86_INS_VPMULLQ = 1170 + let UC_X86_INS_VPMULLW = 1171 + let UC_X86_INS_VPMULUDQ = 1172 + let UC_X86_INS_VPORD = 1173 + let UC_X86_INS_VPORQ = 1174 + let UC_X86_INS_VPOR = 1175 + let UC_X86_INS_VPPERM = 1176 + let UC_X86_INS_VPROTB = 1177 + let UC_X86_INS_VPROTD = 1178 + let UC_X86_INS_VPROTQ = 1179 + let UC_X86_INS_VPROTW = 1180 + let UC_X86_INS_VPSADBW = 1181 + let UC_X86_INS_VPSCATTERDD = 1182 + let UC_X86_INS_VPSCATTERDQ = 1183 + let UC_X86_INS_VPSCATTERQD = 1184 + let UC_X86_INS_VPSCATTERQQ = 1185 + let UC_X86_INS_VPSHAB = 1186 + let UC_X86_INS_VPSHAD = 1187 + let UC_X86_INS_VPSHAQ = 1188 + let UC_X86_INS_VPSHAW = 1189 + let UC_X86_INS_VPSHLB = 1190 + let UC_X86_INS_VPSHLD = 1191 + let UC_X86_INS_VPSHLQ = 1192 + let UC_X86_INS_VPSHLW = 1193 + let UC_X86_INS_VPSHUFB = 1194 + let UC_X86_INS_VPSHUFD = 1195 + let UC_X86_INS_VPSHUFHW = 1196 + let UC_X86_INS_VPSHUFLW = 1197 + let UC_X86_INS_VPSIGNB = 1198 + let UC_X86_INS_VPSIGND = 1199 + let UC_X86_INS_VPSIGNW = 1200 + let UC_X86_INS_VPSLLDQ = 1201 + let UC_X86_INS_VPSLLD = 1202 + let UC_X86_INS_VPSLLQ = 1203 + let UC_X86_INS_VPSLLVD = 1204 + let UC_X86_INS_VPSLLVQ = 1205 + let UC_X86_INS_VPSLLW = 1206 + let UC_X86_INS_VPSRAD = 1207 + let UC_X86_INS_VPSRAQ = 1208 + let UC_X86_INS_VPSRAVD = 1209 + let UC_X86_INS_VPSRAVQ = 1210 + let UC_X86_INS_VPSRAW = 1211 + let UC_X86_INS_VPSRLDQ = 1212 + let UC_X86_INS_VPSRLD = 1213 + let UC_X86_INS_VPSRLQ = 1214 + let UC_X86_INS_VPSRLVD = 1215 + let UC_X86_INS_VPSRLVQ = 1216 + let UC_X86_INS_VPSRLW = 1217 + let UC_X86_INS_VPSUBB = 1218 + let UC_X86_INS_VPSUBD = 1219 + let UC_X86_INS_VPSUBQ = 1220 + let UC_X86_INS_VPSUBSB = 1221 + let UC_X86_INS_VPSUBSW = 1222 + let UC_X86_INS_VPSUBUSB = 1223 + let UC_X86_INS_VPSUBUSW = 1224 + let UC_X86_INS_VPSUBW = 1225 + let UC_X86_INS_VPTESTMD = 1226 + let UC_X86_INS_VPTESTMQ = 1227 + let UC_X86_INS_VPTESTNMD = 1228 + let UC_X86_INS_VPTESTNMQ = 1229 + let UC_X86_INS_VPTEST = 1230 + let UC_X86_INS_VPUNPCKHBW = 1231 + let UC_X86_INS_VPUNPCKHDQ = 1232 + let UC_X86_INS_VPUNPCKHQDQ = 1233 + let UC_X86_INS_VPUNPCKHWD = 1234 + let UC_X86_INS_VPUNPCKLBW = 1235 + let UC_X86_INS_VPUNPCKLDQ = 1236 + let UC_X86_INS_VPUNPCKLQDQ = 1237 + let UC_X86_INS_VPUNPCKLWD = 1238 + let UC_X86_INS_VPXORD = 1239 + let UC_X86_INS_VPXORQ = 1240 + let UC_X86_INS_VPXOR = 1241 + let UC_X86_INS_VRCP14PD = 1242 + let UC_X86_INS_VRCP14PS = 1243 + let UC_X86_INS_VRCP14SD = 1244 + let UC_X86_INS_VRCP14SS = 1245 + let UC_X86_INS_VRCP28PD = 1246 + let UC_X86_INS_VRCP28PS = 1247 + let UC_X86_INS_VRCP28SD = 1248 + let UC_X86_INS_VRCP28SS = 1249 + let UC_X86_INS_VRCPPS = 1250 + let UC_X86_INS_VRCPSS = 1251 + let UC_X86_INS_VRNDSCALEPD = 1252 + let UC_X86_INS_VRNDSCALEPS = 1253 + let UC_X86_INS_VRNDSCALESD = 1254 + let UC_X86_INS_VRNDSCALESS = 1255 + let UC_X86_INS_VROUNDPD = 1256 + let UC_X86_INS_VROUNDPS = 1257 + let UC_X86_INS_VROUNDSD = 1258 + let UC_X86_INS_VROUNDSS = 1259 + let UC_X86_INS_VRSQRT14PD = 1260 + let UC_X86_INS_VRSQRT14PS = 1261 + let UC_X86_INS_VRSQRT14SD = 1262 + let UC_X86_INS_VRSQRT14SS = 1263 + let UC_X86_INS_VRSQRT28PD = 1264 + let UC_X86_INS_VRSQRT28PS = 1265 + let UC_X86_INS_VRSQRT28SD = 1266 + let UC_X86_INS_VRSQRT28SS = 1267 + let UC_X86_INS_VRSQRTPS = 1268 + let UC_X86_INS_VRSQRTSS = 1269 + let UC_X86_INS_VSCATTERDPD = 1270 + let UC_X86_INS_VSCATTERDPS = 1271 + let UC_X86_INS_VSCATTERPF0DPD = 1272 + let UC_X86_INS_VSCATTERPF0DPS = 1273 + let UC_X86_INS_VSCATTERPF0QPD = 1274 + let UC_X86_INS_VSCATTERPF0QPS = 1275 + let UC_X86_INS_VSCATTERPF1DPD = 1276 + let UC_X86_INS_VSCATTERPF1DPS = 1277 + let UC_X86_INS_VSCATTERPF1QPD = 1278 + let UC_X86_INS_VSCATTERPF1QPS = 1279 + let UC_X86_INS_VSCATTERQPD = 1280 + let UC_X86_INS_VSCATTERQPS = 1281 + let UC_X86_INS_VSHUFPD = 1282 + let UC_X86_INS_VSHUFPS = 1283 + let UC_X86_INS_VSQRTPD = 1284 + let UC_X86_INS_VSQRTPS = 1285 + let UC_X86_INS_VSQRTSD = 1286 + let UC_X86_INS_VSQRTSS = 1287 + let UC_X86_INS_VSTMXCSR = 1288 + let UC_X86_INS_VSUBPD = 1289 + let UC_X86_INS_VSUBPS = 1290 + let UC_X86_INS_VSUBSD = 1291 + let UC_X86_INS_VSUBSS = 1292 + let UC_X86_INS_VTESTPD = 1293 + let UC_X86_INS_VTESTPS = 1294 + let UC_X86_INS_VUNPCKHPD = 1295 + let UC_X86_INS_VUNPCKHPS = 1296 + let UC_X86_INS_VUNPCKLPD = 1297 + let UC_X86_INS_VUNPCKLPS = 1298 + let UC_X86_INS_VZEROALL = 1299 + let UC_X86_INS_VZEROUPPER = 1300 + let UC_X86_INS_WAIT = 1301 + let UC_X86_INS_WBINVD = 1302 + let UC_X86_INS_WRFSBASE = 1303 + let UC_X86_INS_WRGSBASE = 1304 + let UC_X86_INS_WRMSR = 1305 + let UC_X86_INS_XABORT = 1306 + let UC_X86_INS_XACQUIRE = 1307 + let UC_X86_INS_XBEGIN = 1308 + let UC_X86_INS_XCHG = 1309 + let UC_X86_INS_XCRYPTCBC = 1310 + let UC_X86_INS_XCRYPTCFB = 1311 + let UC_X86_INS_XCRYPTCTR = 1312 + let UC_X86_INS_XCRYPTECB = 1313 + let UC_X86_INS_XCRYPTOFB = 1314 + let UC_X86_INS_XEND = 1315 + let UC_X86_INS_XGETBV = 1316 + let UC_X86_INS_XLATB = 1317 + let UC_X86_INS_XRELEASE = 1318 + let UC_X86_INS_XRSTOR = 1319 + let UC_X86_INS_XRSTOR64 = 1320 + let UC_X86_INS_XRSTORS = 1321 + let UC_X86_INS_XRSTORS64 = 1322 + let UC_X86_INS_XSAVE = 1323 + let UC_X86_INS_XSAVE64 = 1324 + let UC_X86_INS_XSAVEC = 1325 + let UC_X86_INS_XSAVEC64 = 1326 + let UC_X86_INS_XSAVEOPT = 1327 + let UC_X86_INS_XSAVEOPT64 = 1328 + let UC_X86_INS_XSAVES = 1329 + let UC_X86_INS_XSAVES64 = 1330 + let UC_X86_INS_XSETBV = 1331 + let UC_X86_INS_XSHA1 = 1332 + let UC_X86_INS_XSHA256 = 1333 + let UC_X86_INS_XSTORE = 1334 + let UC_X86_INS_XTEST = 1335 + let UC_X86_INS_FDISI8087_NOP = 1336 + let UC_X86_INS_FENI8087_NOP = 1337 + let UC_X86_INS_ENDING = 1338 + diff --git a/bindings/dotnet/UnicornManaged/ConvertUtility.fs b/bindings/dotnet/UnicornManaged/ConvertUtility.fs new file mode 100644 index 00000000..5e455bf7 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/ConvertUtility.fs @@ -0,0 +1,21 @@ +namespace UnicornManaged + +open System + +[] +module internal ConvertUtility = + + let int64ToBytes(v: Int64) = + let res = Array.zeroCreate 8 + let mutable uv = uint64 v + for i = 0 to res.Length-1 do + res.[i] <- byte (uv &&& uint64 0xFF) + uv <- uv >>> 8 + res + + let bytesToInt64(v: Byte array) = + let mutable res = uint64 0 + for i = 0 to v.Length-1 do + let tmpV = v.[i] &&& byte 0xFF + res <- res + (uint64 tmpV <<< (i * 8)) + int64 res \ No newline at end of file diff --git a/bindings/dotnet/UnicornManaged/InternalHooks.fs b/bindings/dotnet/UnicornManaged/InternalHooks.fs new file mode 100644 index 00000000..36cfc3ce --- /dev/null +++ b/bindings/dotnet/UnicornManaged/InternalHooks.fs @@ -0,0 +1,32 @@ +namespace UnicornManaged + +open System +open System.Runtime.InteropServices + +// internal hooks to be passed to native Unicorn library +[] +type internal CodeHookInternal = delegate of IntPtr * Int64 * Int32 * IntPtr -> unit + +[] +type internal BlockHookInternal = delegate of IntPtr * Int64 * Int32 * IntPtr -> unit + +[] +type internal InterruptHookInternal = delegate of IntPtr * Int32 * IntPtr -> unit + +[] +type internal MemReadHookInternal = delegate of IntPtr * Int64 * Int32 * IntPtr -> unit + +[] +type internal MemWriteHookInternal = delegate of IntPtr * Int64 * Int32 * Int64 * IntPtr -> unit + +[] +type internal EventMemHookInternal = delegate of IntPtr * Int32 * Int64 * Int32 * Int64 * IntPtr-> Boolean + +[] +type internal InHookInternal = delegate of IntPtr * Int32 * Int32 * IntPtr -> Int32 + +[] +type internal OutHookInternal = delegate of IntPtr * Int32 * Int32 * Int32 * IntPtr -> unit + +[] +type internal SyscallHookInternal = delegate of IntPtr * IntPtr -> unit \ No newline at end of file diff --git a/bindings/dotnet/UnicornManaged/Unicorn.fs b/bindings/dotnet/UnicornManaged/Unicorn.fs new file mode 100644 index 00000000..cd8db3c1 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/Unicorn.fs @@ -0,0 +1,343 @@ +namespace UnicornManaged + +open System +open System.Threading +open System.Collections.Generic +open System.Runtime.InteropServices +open System.Linq +open UnicornManaged.Const +open UnicornManaged.Binding + +// exported hooks +type CodeHook = delegate of Unicorn * Int64 * Int32 * Object -> unit +and BlockHook = delegate of Unicorn * Int64 * Int32 * Object -> unit +and InterruptHook = delegate of Unicorn * Int32 * Object -> unit +and MemReadHook = delegate of Unicorn * Int64 * Int32 * Object -> unit +and MemWriteHook = delegate of Unicorn * Int64 * Int32 * Int64 * Object -> unit +and EventMemHook = delegate of Unicorn * Int32 * Int64 * Int32 * Int64 * Object -> Boolean +and InHook = delegate of Unicorn * Int32 * Int32 * Object -> Int32 +and OutHook = delegate of Unicorn * Int32 * Int32 * Int32 * Object -> unit +and SyscallHook = delegate of Unicorn * Object -> unit + +// the managed unicorn engine +and Unicorn(arch: Int32, mode: Int32, binding: IBinding) = + + // hook callback list + let _codeHooks = new List<(CodeHook * Object)>() + let _blockHooks = new List<(BlockHook * Object)>() + let _interruptHooks = new List<(InterruptHook * Object)>() + let _memReadHooks = new List<(MemReadHook * Object)>() + let _memWriteHooks = new List<(MemWriteHook * Object)>() + let _memEventHooks = new Dictionary>() + let _inHooks = new List<(InHook * Object)>() + let _outHooks = new List<(OutHook * Object)>() + let _syscallHooks = new List<(SyscallHook * Object)>() + let _disposablePointers = new List() + + let _eventMemMap = + [ + (UC_HOOK_MEM_READ_UNMAPPED, UC_MEM_READ_UNMAPPED) + (UC_HOOK_MEM_WRITE_UNMAPPED, UC_MEM_WRITE_UNMAPPED) + (UC_HOOK_MEM_FETCH_UNMAPPED, UC_MEM_FETCH_UNMAPPED) + (UC_HOOK_MEM_READ_PROT, UC_MEM_READ_PROT) + (UC_HOOK_MEM_WRITE_PROT, UC_MEM_WRITE_PROT) + (UC_HOOK_MEM_FETCH_PROT, UC_MEM_FETCH_PROT) + ] |> dict + + let mutable _eng = [|UIntPtr.Zero|] + + let checkResult(errCode: Int32, errMsg: String) = + if errCode <> Common.UC_ERR_OK then raise(ApplicationException(String.Format("{0}. Error: {1}", errMsg, errCode))) + + let hookDel(callbacks: List<'a * Object>) (callback: 'a)= + // TODO: invoke the native function in order to not call the trampoline anymore + callbacks + |> Seq.tryFind(fun item -> match item with | (c, _) -> c = callback) + |> (fun k -> if k.IsSome then callbacks.Remove(k.Value) |> ignore) + + let allocate(size: Int32) = + let mem = Marshal.AllocHGlobal(size) + _disposablePointers.Add(mem) + mem.ToPointer() + + do + // initialize event list + _eventMemMap + |> Seq.map(fun kv -> kv.Key) + |> Seq.iter (fun eventType -> _memEventHooks.Add(eventType, new List())) + + // init engine + _eng <- [|new UIntPtr(allocate(IntPtr.Size))|] + let err = binding.UcOpen(uint32 arch, uint32 mode, _eng) + checkResult(err, "Unable to open the Unicorn Engine") + + new(arch, mode) = new Unicorn(arch, mode, BindingFactory.getDefault()) + + member private this.CheckResult(errorCode: Int32) = + // return the exception instead of raising it in order to have a more meaningful stack trace + if errorCode <> Common.UC_ERR_OK then + let errorMessage = this.StrError(errorCode) + Some <| UnicornEngineException(errorCode, errorMessage) + else None + + member this.MemMap(address: Int64, size: Int64, perm: Int32) = + let size = new UIntPtr(uint64 size) + match binding.MemMap(_eng.[0], uint64 address, size, uint32 perm) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.MemMapPtr(address: Int64, size: Int64, perm: Int32, ptr: IntPtr) = + let size = new UIntPtr(uint64 size) + let ptr = new UIntPtr(ptr.ToPointer()) + match binding.MemMapPtr(_eng.[0], uint64 address, size, uint32 perm, ptr) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.MemUnmap(address: Int64, size: Int64) = + let size = new UIntPtr(uint64 size) + match binding.MemUnmap(_eng.[0], uint64 address, size) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.MemProtect(address: Int64, size: Int64, ?perm: Int32) = + let size = new UIntPtr(uint64 size) + let perm = defaultArg perm Common.UC_PROT_ALL + match binding.MemProtect(_eng.[0], uint64 address, size, uint32 perm) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.MemWrite(address: Int64, value: Byte array) = + match binding.MemWrite(_eng.[0], uint64 address, value, new UIntPtr(uint32 value.Length)) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.MemRead(address: Int64, memValue: Byte array) = + match binding.MemRead(_eng.[0], uint64 address, memValue, new UIntPtr(uint32 memValue.Length)) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.RegWrite(regId: Int32, value: Byte array) = + match binding.RegWrite(_eng.[0], regId, value) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.RegWrite(regId: Int32, value: Int64) = + this.RegWrite(regId, int64ToBytes value) + + member this.RegRead(regId: Int32, regValue: Byte array) = + match binding.RegRead(_eng.[0], regId, regValue) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.RegRead(regId: Int32) = + let buffer = Array.zeroCreate 8 + this.RegRead(regId, buffer) + bytesToInt64 buffer + + member this.EmuStart(beginAddr: Int64, untilAddr: Int64, timeout: Int64, count: Int64) = + match binding.EmuStart(_eng.[0], uint64 beginAddr, uint64 untilAddr, uint64 timeout, uint64 count) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.EmuStop() = + match binding.EmuStop(_eng.[0]) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.Close() = + match binding.Close(_eng.[0]) |> this.CheckResult with + | Some e -> raise e | None -> () + + member this.ArchSupported(arch: Int32) = + binding.ArchSupported(arch) + + member this.ErrNo() = + binding.Errono(_eng.[0]) + + member this.StrError(errorNo: Int32) = + let errorStringPointer = binding.Strerror(errorNo) + Marshal.PtrToStringAnsi(errorStringPointer) + + member this.AddCodeHook(callback: CodeHook, userData: Object, beginAddr: Int64, endAddr: Int64) = + let trampoline(u: IntPtr) (addr: Int64) (size: Int32) (user: IntPtr) = + _codeHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, addr, size, userData)) + + if _codeHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new CodeHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0Arg1(_eng.[0], hh, Common.UC_HOOK_CODE, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, uint64 beginAddr, uint64 endAddr) |> this.CheckResult with + | Some e -> raise e | None -> () + + _codeHooks.Add(callback, userData) + + member this.AddCodeHook(callback: CodeHook, beginAddr: Int64, endAddr: Int64) = + this.AddCodeHook(callback, null, beginAddr, endAddr) + + member this.HookDel(callback: CodeHook) = + hookDel _codeHooks callback + + member this.AddBlockHook(callback: BlockHook, userData: Object, beginAddr: Int64, endAddr: Int64) = + let trampoline(u: IntPtr) (addr: Int64) (size: Int32) (user: IntPtr) = + _blockHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, addr, size, userData)) + + if _blockHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new BlockHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0Arg1(_eng.[0], hh, Common.UC_HOOK_BLOCK, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, uint64 beginAddr, uint64 endAddr) |> this.CheckResult with + | Some e -> raise e | None -> () + + _blockHooks.Add(callback, userData) + + member this.HookDel(callback: BlockHook) = + hookDel _blockHooks callback + + member this.AddInterruptHook(callback: InterruptHook, userData: Object) = + let trampoline(u: IntPtr) (intNumber: Int32) (user: IntPtr) = + _interruptHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, intNumber, userData)) + + if _interruptHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new InterruptHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddNoarg(_eng.[0], hh, Common.UC_HOOK_INTR, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero) |> this.CheckResult with + | Some e -> raise e | None -> () + + _interruptHooks.Add(callback, userData) + + member this.AddInterruptHook(callback: InterruptHook) = + this.AddInterruptHook(callback, null) + + member this.HookDel(callback: InterruptHook) = + hookDel _interruptHooks callback + + member this.AddMemReadHook(callback: MemReadHook, userData: Object, beginAddr: Int64, endAddr: Int64) = + let trampoline(u: IntPtr) (addr: Int64) (size: Int32) (user: IntPtr) = + _memReadHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, addr, size, userData)) + + if _memReadHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new MemReadHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0Arg1(_eng.[0], hh, Common.UC_HOOK_MEM_READ, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, uint64 beginAddr, uint64 endAddr) |> this.CheckResult with + | Some e -> raise e | None -> () + + _memReadHooks.Add(callback, userData) + + member this.HookDel(callback: MemReadHook) = + hookDel _memReadHooks callback + + member this.AddMemWriteHook(callback: MemWriteHook, userData: Object, beginAddr: Int64, endAddr: Int64) = + let trampoline(u: IntPtr) (addr: Int64) (size: Int32) (value: Int64) (user: IntPtr) = + _memWriteHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, addr, size, value, userData)) + + if _memWriteHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new MemWriteHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0Arg1(_eng.[0], hh, Common.UC_HOOK_MEM_WRITE, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, uint64 beginAddr, uint64 endAddr) |> this.CheckResult with + | Some e -> raise e | None -> () + + _memWriteHooks.Add(callback, userData) + + member this.HookDel(callback: MemWriteHook) = + hookDel _memWriteHooks callback + + member this.AddEventMemHook(callback: EventMemHook, eventType: Int32, userData: Object) = + let trampoline(u: IntPtr) (eventType: Int32) (addr: Int64) (size: Int32) (value: Int64) (user: IntPtr) = + _memEventHooks.Keys + |> Seq.filter(fun eventFlag -> (eventType &&& eventFlag) <> 0) + |> Seq.map(fun eventflag -> _memEventHooks.[eventflag]) + |> Seq.concat + |> Seq.map(fun (callback, userData) -> callback.Invoke(this, eventType, addr, size, value, userData)) + |> Seq.forall id + + // register the event if not already done + _memEventHooks.Keys + |> Seq.filter(fun eventFlag -> (eventType &&& eventFlag) <> 0) + |> Seq.filter(fun eventFlag -> _memEventHooks.[eventFlag] |> Seq.isEmpty) + |> Seq.iter(fun eventFlag -> + let funcPointer = Marshal.GetFunctionPointerForDelegate(new EventMemHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddNoarg(_eng.[0], hh, eventFlag, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero) |> this.CheckResult with + | Some e -> raise e | None -> () + ) + + // register the callbacks + _memEventHooks.Keys + |> Seq.filter(fun eventFlag -> (eventType &&& eventFlag) <> 0) + |> Seq.iter(fun eventFlag -> _memEventHooks.[eventFlag].Add((callback, userData))) + + member this.AddEventMemHook(callback: EventMemHook, eventType: Int32) = + this.AddEventMemHook(callback, eventType, null) + + member this.HookDel(callback: EventMemHook) = + let callbacks = (_memEventHooks.Values |> Seq.concat).ToList() + hookDel callbacks callback + + member this.AddInHook(callback: InHook, userData: Object) = + let trampoline(u: IntPtr) (port: Int32) (size: Int32) (user: IntPtr) = + _inHooks + |> Seq.map(fun (callback, userData) -> callback.Invoke(this, port, size, userData)) + |> Seq.last + + if _inHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new InHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0(_eng.[0], hh, Common.UC_HOOK_INSN, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, X86.UC_X86_INS_IN) |> this.CheckResult with + | Some e -> raise e | None -> () + + _inHooks.Add(callback, userData) + + member this.AddInHook(callback: InHook) = + this.AddInHook(callback, null) + + member this.AddOutHook(callback: OutHook, userData: Object) = + let trampoline(u: IntPtr) (port: Int32) (size: Int32) (value: Int32) (user: IntPtr) = + _outHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, port, size, value, userData)) + + if _outHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new OutHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0(_eng.[0], hh, Common.UC_HOOK_INSN, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, X86.UC_X86_INS_OUT) |> this.CheckResult with + | Some e -> raise e | None -> () + + _outHooks.Add(callback, userData) + + member this.AddOutHook(callback: OutHook) = + this.AddOutHook(callback, null) + + member this.AddSyscallHook(callback: SyscallHook, userData: Object) = + let trampoline(u: IntPtr) (user: IntPtr) = + _syscallHooks + |> Seq.iter(fun (callback, userData) -> callback.Invoke(this, userData)) + + if _syscallHooks |> Seq.isEmpty then + let funcPointer = Marshal.GetFunctionPointerForDelegate(new SyscallHookInternal(trampoline)) + let hh = new UIntPtr(allocate(IntPtr.Size)) + match binding.HookAddArg0(_eng.[0], hh, Common.UC_HOOK_INSN, new UIntPtr(funcPointer.ToPointer()), IntPtr.Zero, X86.UC_X86_INS_SYSCALL) |> this.CheckResult with + | Some e -> raise e | None -> () + + _syscallHooks.Add(callback, userData) + + member this.AddSyscallHook(callback: SyscallHook) = + this.AddSyscallHook(callback, null) + + member this.Version() = + let (major, minor) = (new UIntPtr(), new UIntPtr()) + let combined = binding.Version(major, minor) + (major.ToUInt32(), minor.ToUInt32(), combined) + + abstract Dispose : Boolean -> unit + default this.Dispose(disposing: Boolean) = + if (disposing) then + // free managed resources, this is the default dispose implementation pattern + () + + _disposablePointers + |> Seq.filter(fun pointer -> pointer <> IntPtr.Zero) + |> Seq.iter Marshal.FreeHGlobal + _disposablePointers.Clear() + + member this.Dispose() = + this.Dispose(true) + GC.SuppressFinalize(this) + + override this.Finalize() = + this.Dispose(false) + + interface IDisposable with + member this.Dispose() = + this.Dispose() \ No newline at end of file diff --git a/bindings/dotnet/UnicornManaged/UnicornEngineException.fs b/bindings/dotnet/UnicornManaged/UnicornEngineException.fs new file mode 100644 index 00000000..fd582557 --- /dev/null +++ b/bindings/dotnet/UnicornManaged/UnicornEngineException.fs @@ -0,0 +1,9 @@ +namespace UnicornManaged + +open System + +type UnicornEngineException(errNo: Int32, msg: String) = + inherit ApplicationException(msg) + + member this.ErrorNo = errNo + diff --git a/bindings/dotnet/Unicorn/Unicorn.fsproj b/bindings/dotnet/UnicornManaged/UnicornManaged.fsproj similarity index 78% rename from bindings/dotnet/Unicorn/Unicorn.fsproj rename to bindings/dotnet/UnicornManaged/UnicornManaged.fsproj index 8f6ee136..e10cd735 100644 --- a/bindings/dotnet/Unicorn/Unicorn.fsproj +++ b/bindings/dotnet/UnicornManaged/UnicornManaged.fsproj @@ -1,17 +1,18 @@  - + Debug AnyCPU 2.0 - 6f0e55fa-a056-45ff-bb24-641457b430a8 + 0c21f1c1-2725-4a46-9022-1905f85822a5 Library - UnicornSln - UnicornSln + UnicornManaged + UnicornManaged v4.5 - 4.3.0.0 - Unicorn + 4.3.1.0 + true + UnicornManaged @@ -22,8 +23,7 @@ bin\Debug\ DEBUG;TRACE 3 - bin\Debug\UnicornSln.XML - x86 + bin\Debug\UnicornManaged.XML pdbonly @@ -32,7 +32,7 @@ bin\Release\ TRACE 3 - bin\Release\UnicornSln.XML + bin\Release\UnicornManaged.XML @@ -44,6 +44,7 @@ + @@ -51,9 +52,13 @@ - - + + + + + + diff --git a/bindings/dotnet/UnicornTests/App.config b/bindings/dotnet/UnicornSamples/App.config similarity index 59% rename from bindings/dotnet/UnicornTests/App.config rename to bindings/dotnet/UnicornSamples/App.config index 9c05822f..d1428ad7 100644 --- a/bindings/dotnet/UnicornTests/App.config +++ b/bindings/dotnet/UnicornSamples/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/bindings/dotnet/UnicornSamples/Gee.External.Capstone.Proxy.dll b/bindings/dotnet/UnicornSamples/Gee.External.Capstone.Proxy.dll new file mode 100644 index 00000000..cb71aff4 Binary files /dev/null and b/bindings/dotnet/UnicornSamples/Gee.External.Capstone.Proxy.dll differ diff --git a/bindings/dotnet/UnicornSamples/Program.cs b/bindings/dotnet/UnicornSamples/Program.cs new file mode 100644 index 00000000..41cfb19c --- /dev/null +++ b/bindings/dotnet/UnicornSamples/Program.cs @@ -0,0 +1,23 @@ +using System; + +namespace UnicornSamples +{ + class Program + { + static void Main(string[] args) + { + // X86 tests 32bit + X86Sample32.X86Code32(); + X86Sample32.X86Code32InvalidMemRead(); + X86Sample32.X86Code32InvalidMemWriteWithRuntimeFix(); + X86Sample32.X86Code32InOut(); + + // Run all shellcode tests + ShellcodeSample.X86Code32Self(); + ShellcodeSample.X86Code32(); + + Console.Write("Tests completed"); + Console.ReadLine(); + } + } +} diff --git a/bindings/dotnet/UnicornTests/Properties/AssemblyInfo.cs b/bindings/dotnet/UnicornSamples/Properties/AssemblyInfo.cs similarity index 85% rename from bindings/dotnet/UnicornTests/Properties/AssemblyInfo.cs rename to bindings/dotnet/UnicornSamples/Properties/AssemblyInfo.cs index c82f9a7b..aacf2f82 100644 --- a/bindings/dotnet/UnicornTests/Properties/AssemblyInfo.cs +++ b/bindings/dotnet/UnicornSamples/Properties/AssemblyInfo.cs @@ -5,12 +5,12 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("UnicornTests")] +[assembly: AssemblyTitle("UnicornSamples")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("UnicornTests")] -[assembly: AssemblyCopyright("Copyright © Antonio Parata 2015")] +[assembly: AssemblyProduct("UnicornSamples")] +[assembly: AssemblyCopyright("Copyright © Antonio Parata 2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -20,7 +20,7 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("29557dcf-999c-44d0-b544-df99f4b06231")] +[assembly: Guid("b80b5987-1e24-4309-8bf9-c4f91270f21c")] // Version information for an assembly consists of the following four values: // diff --git a/bindings/dotnet/UnicornTests/ShellcodeTest.cs b/bindings/dotnet/UnicornSamples/ShellcodeSample.cs similarity index 54% rename from bindings/dotnet/UnicornTests/ShellcodeTest.cs rename to bindings/dotnet/UnicornSamples/ShellcodeSample.cs index e254fb4a..be654d6f 100644 --- a/bindings/dotnet/UnicornTests/ShellcodeTest.cs +++ b/bindings/dotnet/UnicornSamples/ShellcodeSample.cs @@ -1,40 +1,22 @@ -/* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*/ - +using Gee.External.Capstone; +using Gee.External.Capstone.X86; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; -using UnicornEngine; -using UnicornEngine.Const; +using UnicornManaged; +using UnicornManaged.Const; -namespace UnicornTests +namespace UnicornSamples { - internal class ShellcodeTest + internal class ShellcodeSample { - private const UInt64 ADDRESS = 0x1000000; + private const Int64 ADDRESS = 0x1000000; - public static void TestX86Code32Self() + public static void X86Code32Self() { Byte[] X86_CODE32_SELF = { @@ -44,14 +26,10 @@ namespace UnicornTests 0x6e, 0x89, 0xe3, 0x52, 0x53, 0x89, 0xe1, 0xca, 0x7d, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }; - Console.WriteLine(); - Console.WriteLine("*** Start Shellcode: " + MethodInfo.GetCurrentMethod().Name); - RunTest(X86_CODE32_SELF, ADDRESS); - Console.WriteLine("End Shellcode: " + MethodInfo.GetCurrentMethod().Name); - Console.WriteLine(); + Run(X86_CODE32_SELF); } - public static void TestX86Code32() + public static void X86Code32() { Byte[] X86_CODE32 = { @@ -60,55 +38,75 @@ namespace UnicornTests 0x6c, 0x6c, 0x6f }; + Run(X86_CODE32); + } + + private static void Run(Byte[] code) + { Console.WriteLine(); - Console.WriteLine("*** Start Shellcode: " + MethodInfo.GetCurrentMethod().Name); - RunTest(X86_CODE32, ADDRESS); - Console.WriteLine("End Shellcode: " + MethodInfo.GetCurrentMethod().Name); + var stackTrace = new StackTrace(); + var stackFrame = stackTrace.GetFrames()[1]; + var methodName = stackFrame.GetMethod().Name; + + Console.WriteLine("*** Start: " + methodName); + RunTest(code, ADDRESS); + Console.WriteLine("*** End: " + methodName); Console.WriteLine(); } - - public static void RunTest(Byte[] code, UInt64 address) + + private static void RunTest(Byte[] code, Int64 address) { try { - var u = new Unicorn(Common.UC_ARCH_X86, Common.UC_MODE_32); - Console.WriteLine("Unicorn version: {0}", u.Version()); + using (var u = new Unicorn(Common.UC_ARCH_X86, Common.UC_MODE_32)) + using(var disassembler = CapstoneDisassembler.CreateX86Disassembler(DisassembleMode.Bit32)) + { + Console.WriteLine("Unicorn version: {0}", u.Version()); + + // map 2MB of memory for this emulation + u.MemMap(address, 2 * 1024 * 1024, Common.UC_PROT_ALL); - // map 2MB of memory for this emulation - u.MemMap(address, new UIntPtr(2 * 1024 * 1024), Common.UC_PROT_ALL); + // write machine code to be emulated to memory + u.MemWrite(address, code); + + // initialize machine registers + u.RegWrite(X86.UC_X86_REG_ESP, Utils.Int64ToBytes(address + 0x200000)); - // write machine code to be emulated to memory - u.MemWrite(address, code); + var regv = new Byte[4]; + u.RegRead(X86.UC_X86_REG_ESP, regv); - // initialize machine registers - u.RegWrite(X86.UC_X86_REG_ESP, Utils.Int64ToBytes(address + 0x200000)); + // tracing all instructions by having @begin > @end + u.AddCodeHook((uc, addr, size, userData) => CodeHookCallback(disassembler, uc, addr, size, userData), 1, 0); - // tracing all instructions by having @begin > @end - u.AddCodeHook(CodeHookCallback, null, 1, 0); + // handle interrupt ourself + u.AddInterruptHook(InterruptHookCallback); - // handle interrupt ourself - u.AddInterruptHook(InterruptHookCallback, null); + // handle SYSCALL + u.AddSyscallHook(SyscallHookCallback); + + Console.WriteLine(">>> Start tracing code"); - // handle SYSCALL - u.AddSyscallHook(SyscallHookCallback, null); + // emulate machine code in infinite time + u.EmuStart(address, address + code.Length, 0u, 0u); - Console.WriteLine(">>> Start tracing linux code"); - - // emulate machine code in infinite time - u.EmuStart(address, address + (UInt64)code.Length, 0u, new UIntPtr(0)); - - Console.WriteLine(">>> Emulation Done!"); + Console.WriteLine(">>> Emulation Done!"); + } } catch (UnicornEngineException ex) { Console.Error.WriteLine("Emulation FAILED! " + ex.Message); } } - - private static void CodeHookCallback(Unicorn u, UInt64 addr, Int32 size, Object userData) + + private static void CodeHookCallback( + CapstoneDisassembler disassembler, + Unicorn u, + Int64 addr, + Int32 size, + Object userData) { - Console.Write("Tracing >>> 0x{0} ", addr.ToString("X")); + Console.Write("[+] 0x{0}: ", addr.ToString("X")); var eipBuffer = new Byte[4]; u.RegRead(X86.UC_X86_REG_EIP, eipBuffer); @@ -117,12 +115,13 @@ namespace UnicornTests var tmp = new Byte[effectiveSize]; u.MemRead(addr, tmp); + var sb = new StringBuilder(); foreach (var t in tmp) { - Console.Write("{0} ", (0xFF & t).ToString("X")); + sb.AppendFormat("{0} ", (0xFF & t).ToString("X")); } - - Console.WriteLine(); + Console.Write("{0,-20}", sb); + Console.WriteLine(Utils.Disassemble(disassembler, tmp)); } private static void SyscallHookCallback(Unicorn u, Object userData) @@ -131,7 +130,7 @@ namespace UnicornTests u.RegRead(X86.UC_X86_REG_EAX, eaxBuffer); var eax = Utils.ToInt(eaxBuffer); - Console.WriteLine("Syscall >>> EAX = 0x{0}", eax.ToString("X")); + Console.WriteLine("[!] Syscall EAX = 0x{0}", eax.ToString("X")); u.EmuStop(); } @@ -156,10 +155,10 @@ namespace UnicornTests switch (eax) { default: - Console.WriteLine("Interrupt >>> 0x{0} num {1}, EAX=0x{2}", eip.ToString("X"), intNumber.ToString("X"), eax.ToString("X")); + Console.WriteLine("[!] Interrupt 0x{0} num {1}, EAX=0x{2}", eip.ToString("X"), intNumber.ToString("X"), eax.ToString("X")); break; case 1: // sys_exit - Console.WriteLine("Interrupt >>> 0x{0} num {1}, SYS_EXIT", eip.ToString("X"), intNumber.ToString("X")); + Console.WriteLine("[!] Interrupt 0x{0} num {1}, SYS_EXIT", eip.ToString("X"), intNumber.ToString("X")); u.EmuStop(); break; case 4: // sys_write @@ -183,7 +182,7 @@ namespace UnicornTests var content = Encoding.Default.GetString(buffer); Console.WriteLine( - "Interrupt >>> 0x{0}: num {1}, SYS_WRITE. buffer = 0x{2}, size = , content = '{3}'", + "[!] Interrupt 0x{0}: num {1}, SYS_WRITE. buffer = 0x{2}, size = , content = '{3}'", eip.ToString("X"), ecx.ToString("X"), edx.ToString("X"), diff --git a/bindings/dotnet/UnicornSamples/UnicornSamples.csproj b/bindings/dotnet/UnicornSamples/UnicornSamples.csproj new file mode 100644 index 00000000..5fb55b61 --- /dev/null +++ b/bindings/dotnet/UnicornSamples/UnicornSamples.csproj @@ -0,0 +1,108 @@ + + + + + Debug + AnyCPU + {B80B5987-1E24-4309-8BF9-C4F91270F21C} + Exe + Properties + UnicornSamples + UnicornSamples + v4.5 + 512 + true + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Gee.External.Capstone.1.2.2\lib\net45\Gee.External.Capstone.dll + True + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + {0c21f1c1-2725-4a46-9022-1905f85822a5} + UnicornManaged + + + + + + + + + \ No newline at end of file diff --git a/bindings/dotnet/UnicornSamples/Utils.cs b/bindings/dotnet/UnicornSamples/Utils.cs new file mode 100644 index 00000000..1f4d287a --- /dev/null +++ b/bindings/dotnet/UnicornSamples/Utils.cs @@ -0,0 +1,47 @@ +using Gee.External.Capstone; +using Gee.External.Capstone.X86; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UnicornSamples +{ + internal static class Utils + { + public static Int64 ToInt(Byte[] val) + { + UInt64 res = 0; + for (var i = 0; i < val.Length; i++) + { + var v = val[i] & 0xFF; + res += (UInt64)(v << (i * 8)); + } + return (Int64)res; + } + + public static Byte[] Int64ToBytes(Int64 intVal) + { + var res = new Byte[8]; + var uval = (UInt64)intVal; + for (var i = 0; i < res.Length; i++) + { + res[i] = (Byte)(uval & 0xff); + uval = uval >> 8; + } + return res; + } + + public static String Disassemble(CapstoneDisassembler disassembler, Byte[] code) + { + var sb = new StringBuilder(); + var instructions = disassembler.DisassembleAll(code); + foreach (var instruction in instructions) + { + sb.AppendFormat("{0} {1}{2}", instruction.Mnemonic, instruction.Operand, Environment.NewLine); + } + return sb.ToString().Trim(); + } + } +} diff --git a/bindings/dotnet/UnicornSamples/X86Sample32.cs b/bindings/dotnet/UnicornSamples/X86Sample32.cs new file mode 100644 index 00000000..f4b5da98 --- /dev/null +++ b/bindings/dotnet/UnicornSamples/X86Sample32.cs @@ -0,0 +1,328 @@ +using Gee.External.Capstone; +using Gee.External.Capstone.X86; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using UnicornManaged; +using UnicornManaged.Const; + +namespace UnicornSamples +{ + internal class X86Sample32 + { + private const Int64 ADDRESS = 0x1000000; + + public static void X86Code32() + { + Byte[] X86_CODE32 = + { + // INC ecx; DEC edx + 0x41, 0x4a + }; + Run(X86_CODE32); + } + + public static void X86Code32InvalidMemRead() + { + Byte[] X86_CODE32_MEM_READ = + { + // mov ecx,[0xaaaaaaaa]; INC ecx; DEC edx + 0x8B, 0x0D, 0xAA, 0xAA, 0xAA, 0xAA, 0x41, 0x4a + }; + Run(X86_CODE32_MEM_READ, true); + } + + public static void X86Code32InvalidMemWriteWithRuntimeFix() + { + Byte[] X86_CODE32_MEM_WRITE = + { + // mov [0xaaaaaaaa], ecx; INC ecx; DEC edx + 0x89, 0x0D, 0xAA, 0xAA, 0xAA, 0xAA, 0x41, 0x4a + }; + Run(X86_CODE32_MEM_WRITE); + } + + public static void X86Code32InOut() + { + Byte[] X86_CODE32_INOUT = + { + // INC ecx; IN AL, 0x3f; DEC edx; OUT 0x46, AL; INC ebx + 0x41, 0xE4, 0x3F, 0x4a, 0xE6, 0x46, 0x43 + }; + Run(X86_CODE32_INOUT); + } + + + private static void Run(Byte[] code, Boolean raiseException = false) + { + Console.WriteLine(); + var stackTrace = new StackTrace(); + var stackFrame = stackTrace.GetFrames()[1]; + var methodName = stackFrame.GetMethod().Name; + + Console.WriteLine("*** Start: " + methodName); + Exception e = null; + try + { + RunTest(code, ADDRESS, Common.UC_MODE_32); + } + catch (UnicornEngineException ex) + { + e = ex; + } + + if (!raiseException && e != null) + { + Console.Error.WriteLine("Emulation FAILED! " + e.Message); + } + + Console.WriteLine("*** End: " + methodName); + Console.WriteLine(); + } + + private static void RunTest(Byte[] code, Int64 address, Int32 mode) + { + using (var u = new Unicorn(Common.UC_ARCH_X86, mode)) + using (var disassembler = CapstoneDisassembler.CreateX86Disassembler(DisassembleMode.Bit32)) + { + Console.WriteLine("Unicorn version: {0}", u.Version()); + + // map 2MB of memory for this emulation + u.MemMap(address, 2 * 1024 * 1024, Common.UC_PROT_ALL); + + // initialize machine registers + u.RegWrite(X86.UC_X86_REG_EAX, 0x1234); + u.RegWrite(X86.UC_X86_REG_ECX, 0x1234); + u.RegWrite(X86.UC_X86_REG_EDX, 0x7890); + + // write machine code to be emulated to memory + u.MemWrite(address, code); + + // initialize machine registers + u.RegWrite(X86.UC_X86_REG_ESP, Utils.Int64ToBytes(address + 0x200000)); + + // handle IN & OUT instruction + u.AddInHook(InHookCallback); + u.AddOutHook(OutHookCallback); + + // tracing all instructions by having @begin > @end + u.AddCodeHook((uc, addr, size, userData) => CodeHookCallback(disassembler, uc, addr, size, userData), 1, 0); + + // handle interrupt ourself + u.AddInterruptHook(InterruptHookCallback); + + // handle SYSCALL + u.AddSyscallHook(SyscallHookCallback); + + // intercept invalid memory events + u.AddEventMemHook(MemMapHookCallback, Common.UC_HOOK_MEM_READ_UNMAPPED | Common.UC_HOOK_MEM_WRITE_UNMAPPED); + + Console.WriteLine(">>> Start tracing code"); + + // emulate machine code in infinite time + u.EmuStart(address, address + code.Length, 0u, 0u); + + // print registers + var ecx = u.RegRead(X86.UC_X86_REG_ECX); + var edx = u.RegRead(X86.UC_X86_REG_EDX); + var eax = u.RegRead(X86.UC_X86_REG_EAX); + Console.WriteLine("[!] EAX = {0}", eax.ToString("X")); + Console.WriteLine("[!] ECX = {0}", ecx.ToString("X")); + Console.WriteLine("[!] EDX = {0}", edx.ToString("X")); + + Console.WriteLine(">>> Emulation Done!"); + } + } + + private static Int32 InHookCallback(Unicorn u, Int32 port, Int32 size, Object userData) + { + var eip = u.RegRead(X86.UC_X86_REG_EIP); + Console.WriteLine("[!] Reading from port 0x{0}, size: {1}, address: 0x{2}", port.ToString("X"), size.ToString("X"), eip.ToString("X")); + var res = 0; + switch (size) + { + case 1: + // read 1 byte to AL + res = 0xf1; + break; + case 2: + // read 2 byte to AX + res = 0xf2; + break; + case 4: + // read 4 byte to EAX + res = 0xf4; + break; + } + + Console.WriteLine("[!] Return value: {0}", res.ToString("X")); + return res; + } + + private static void OutHookCallback(Unicorn u, Int32 port, Int32 size, Int32 value, Object userData) + { + var eip = u.RegRead(X86.UC_X86_REG_EIP); + Console.WriteLine("[!] Writing to port 0x{0}, size: {1}, value: 0x{2}, address: 0x{3}", port.ToString("X"), size.ToString("X"), value.ToString("X"), eip.ToString("X")); + + // confirm that value is indeed the value of AL/ AX / EAX + var v = 0L; + var regName = String.Empty; + switch (size) + { + case 1: + // read 1 byte in AL + v = u.RegRead(X86.UC_X86_REG_AL); + regName = "AL"; + break; + case 2: + // read 2 byte in AX + v = u.RegRead(X86.UC_X86_REG_AX); + regName = "AX"; + break; + case 4: + // read 4 byte in EAX + v = u.RegRead(X86.UC_X86_REG_EAX); + regName = "EAX"; + break; + } + + Console.WriteLine("[!] Register {0}: {1}", regName, v.ToString("X")); + } + + private static Boolean MemMapHookCallback(Unicorn u, Int32 eventType, Int64 address, Int32 size, Int64 value, Object userData) + { + if (eventType == Common.UC_MEM_WRITE_UNMAPPED) + { + Console.WriteLine("[!] Missing memory is being WRITE at 0x{0}, data size = {1}, data value = 0x{2}. Map memory.", address.ToString("X"), size.ToString("X"), value.ToString("X")); + u.MemMap(0xaaaa0000, 2 * 1024 * 1024, Common.UC_PROT_ALL); + return true; + } + else + { + return false; + } + } + + private static void CodeHookCallback1( + CapstoneDisassembler disassembler, + Unicorn u, + Int64 addr, + Int32 size, + Object userData) + { + Console.Write("[+] 0x{0}: ", addr.ToString("X")); + + var eipBuffer = new Byte[4]; + u.RegRead(X86.UC_X86_REG_EIP, eipBuffer); + + var effectiveSize = Math.Min(16, size); + var tmp = new Byte[effectiveSize]; + u.MemRead(addr, tmp); + + var sb = new StringBuilder(); + foreach (var t in tmp) + { + sb.AppendFormat("{0} ", (0xFF & t).ToString("X")); + } + Console.Write("{0,-20}", sb); + Console.WriteLine(Utils.Disassemble(disassembler, tmp)); + } + + private static void CodeHookCallback( + CapstoneDisassembler disassembler, + Unicorn u, + Int64 addr, + Int32 size, + Object userData) + { + Console.Write("[+] 0x{0}: ", addr.ToString("X")); + + var eipBuffer = new Byte[4]; + u.RegRead(X86.UC_X86_REG_EIP, eipBuffer); + + var effectiveSize = Math.Min(16, size); + var tmp = new Byte[effectiveSize]; + u.MemRead(addr, tmp); + + var sb = new StringBuilder(); + foreach (var t in tmp) + { + sb.AppendFormat("{0} ", (0xFF & t).ToString("X")); + } + Console.Write("{0,-20}", sb); + Console.WriteLine(Utils.Disassemble(disassembler, tmp)); + } + + private static void SyscallHookCallback(Unicorn u, Object userData) + { + var eaxBuffer = new Byte[4]; + u.RegRead(X86.UC_X86_REG_EAX, eaxBuffer); + var eax = Utils.ToInt(eaxBuffer); + + Console.WriteLine("[!] Syscall EAX = 0x{0}", eax.ToString("X")); + + u.EmuStop(); + } + + private static void InterruptHookCallback(Unicorn u, Int32 intNumber, Object userData) + { + // only handle Linux syscall + if (intNumber != 0x80) + { + return; + } + + var eaxBuffer = new Byte[4]; + var eipBuffer = new Byte[4]; + + u.RegRead(X86.UC_X86_REG_EAX, eaxBuffer); + u.RegRead(X86.UC_X86_REG_EIP, eipBuffer); + + var eax = Utils.ToInt(eaxBuffer); + var eip = Utils.ToInt(eipBuffer); + + switch (eax) + { + default: + Console.WriteLine("[!] Interrupt 0x{0} num {1}, EAX=0x{2}", eip.ToString("X"), intNumber.ToString("X"), eax.ToString("X")); + break; + case 1: // sys_exit + Console.WriteLine("[!] Interrupt 0x{0} num {1}, SYS_EXIT", eip.ToString("X"), intNumber.ToString("X")); + u.EmuStop(); + break; + case 4: // sys_write + + // ECX = buffer address + var ecxBuffer = new Byte[4]; + + // EDX = buffer size + var edxBuffer = new Byte[4]; + + u.RegRead(X86.UC_X86_REG_ECX, ecxBuffer); + u.RegRead(X86.UC_X86_REG_EDX, edxBuffer); + + var ecx = Utils.ToInt(ecxBuffer); + var edx = Utils.ToInt(edxBuffer); + + // read the buffer in + var size = Math.Min(256, edx); + var buffer = new Byte[size]; + u.MemRead(ecx, buffer); + var content = Encoding.Default.GetString(buffer); + + Console.WriteLine( + "[!] Interrupt 0x{0}: num {1}, SYS_WRITE. buffer = 0x{2}, size = , content = '{3}'", + eip.ToString("X"), + ecx.ToString("X"), + edx.ToString("X"), + content); + + break; + } + } + } +} diff --git a/bindings/dotnet/UnicornSamples/capstone.dll b/bindings/dotnet/UnicornSamples/capstone.dll new file mode 100644 index 00000000..ec524e2d Binary files /dev/null and b/bindings/dotnet/UnicornSamples/capstone.dll differ diff --git a/bindings/dotnet/UnicornSamples/packages.config b/bindings/dotnet/UnicornSamples/packages.config new file mode 100644 index 00000000..d4215eec --- /dev/null +++ b/bindings/dotnet/UnicornSamples/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/bindings/dotnet/UnicornSln.sln b/bindings/dotnet/UnicornSln.sln deleted file mode 100644 index 72b0b5ef..00000000 --- a/bindings/dotnet/UnicornSln.sln +++ /dev/null @@ -1,28 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Unicorn", "Unicorn\Unicorn.fsproj", "{6F0E55FA-A056-45FF-BB24-641457B430A8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnicornTests", "UnicornTests\UnicornTests.csproj", "{6437C22A-9DBD-47CE-8792-403BED230B54}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6F0E55FA-A056-45FF-BB24-641457B430A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F0E55FA-A056-45FF-BB24-641457B430A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F0E55FA-A056-45FF-BB24-641457B430A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F0E55FA-A056-45FF-BB24-641457B430A8}.Release|Any CPU.Build.0 = Release|Any CPU - {6437C22A-9DBD-47CE-8792-403BED230B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6437C22A-9DBD-47CE-8792-403BED230B54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6437C22A-9DBD-47CE-8792-403BED230B54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6437C22A-9DBD-47CE-8792-403BED230B54}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/bindings/dotnet/UnicornTests/Program.cs b/bindings/dotnet/UnicornTests/Program.cs deleted file mode 100644 index dde8d1e8..00000000 --- a/bindings/dotnet/UnicornTests/Program.cs +++ /dev/null @@ -1,39 +0,0 @@ -/* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*/ - -using System; -using System.Collections.Generic; -using System.Text; -using UnicornEngine; -using UnicornEngine.Const; - -namespace UnicornTests -{ - class Program - { - static void Main(String[] args) - { - // Run all shellcode tests - ShellcodeTest.TestX86Code32Self(); - ShellcodeTest.TestX86Code32(); - } - } -} diff --git a/bindings/dotnet/UnicornTests/UnicornTests.csproj b/bindings/dotnet/UnicornTests/UnicornTests.csproj deleted file mode 100644 index dfb6bdf1..00000000 --- a/bindings/dotnet/UnicornTests/UnicornTests.csproj +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Debug - AnyCPU - {6437C22A-9DBD-47CE-8792-403BED230B54} - Exe - Properties - UnicornTests - UnicornTests - v4.5.1 - 512 - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - - - - - - {6f0e55fa-a056-45ff-bb24-641457b430a8} - Unicorn - - - - - \ No newline at end of file diff --git a/bindings/dotnet/UnicornTests/Utils.cs b/bindings/dotnet/UnicornTests/Utils.cs deleted file mode 100644 index 557a9a34..00000000 --- a/bindings/dotnet/UnicornTests/Utils.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* - -.NET bindings for the UnicornEngine Emulator Engine - -Copyright(c) 2015 Antonio Parata - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -version 2 as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnicornEngine.Const; - -namespace UnicornTests -{ - internal static class Utils - { - public static UInt64 ToInt(Byte[] val) - { - UInt64 res = 0; - for (var i = 0; i < val.Length; i++) - { - var v = val[i] & 0xFF; - res += (UInt64)(v << (i * 8)); - } - return res; - } - - public static Byte[] Int64ToBytes(UInt64 intVal) - { - var res = new Byte[8]; - for (var i = 0; i < res.Length; i++) - { - res[i] = (Byte)(intVal & 0xff); - intVal = intVal >> 8; - } - return res; - } - } -} diff --git a/qemu/aarch64.h b/qemu/aarch64.h index fad1d153..2deac84f 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_aarch64 #define tcg_reg_alloc_start tcg_reg_alloc_start_aarch64 #define tcg_reg_free tcg_reg_free_aarch64 -#define tcg_register_jit tcg_register_jit_aarch64 -#define tcg_register_jit_int tcg_register_jit_int_aarch64 #define tcg_reg_sync tcg_reg_sync_aarch64 #define tcg_set_frame tcg_set_frame_aarch64 #define tcg_set_nop tcg_set_nop_aarch64 diff --git a/qemu/arm.h b/qemu/arm.h index 88617c02..a5ae3a38 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_arm #define tcg_reg_alloc_start tcg_reg_alloc_start_arm #define tcg_reg_free tcg_reg_free_arm -#define tcg_register_jit tcg_register_jit_arm -#define tcg_register_jit_int tcg_register_jit_int_arm #define tcg_reg_sync tcg_reg_sync_arm #define tcg_set_frame tcg_set_frame_arm #define tcg_set_nop tcg_set_nop_arm diff --git a/qemu/header_gen.py b/qemu/header_gen.py index ed74332d..d889247d 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -3022,8 +3022,6 @@ symbols = ( 'tcg_reg_alloc_op', 'tcg_reg_alloc_start', 'tcg_reg_free', - 'tcg_register_jit', - 'tcg_register_jit_int', 'tcg_reg_sync', 'tcg_set_frame', 'tcg_set_nop', diff --git a/qemu/m68k.h b/qemu/m68k.h index 8314001b..f1a6712f 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_m68k #define tcg_reg_alloc_start tcg_reg_alloc_start_m68k #define tcg_reg_free tcg_reg_free_m68k -#define tcg_register_jit tcg_register_jit_m68k -#define tcg_register_jit_int tcg_register_jit_int_m68k #define tcg_reg_sync tcg_reg_sync_m68k #define tcg_set_frame tcg_set_frame_m68k #define tcg_set_nop tcg_set_nop_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 75269fb8..ed7e86d1 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_mips #define tcg_reg_alloc_start tcg_reg_alloc_start_mips #define tcg_reg_free tcg_reg_free_mips -#define tcg_register_jit tcg_register_jit_mips -#define tcg_register_jit_int tcg_register_jit_int_mips #define tcg_reg_sync tcg_reg_sync_mips #define tcg_set_frame tcg_set_frame_mips #define tcg_set_nop tcg_set_nop_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index b5c2908e..96ff3baa 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_mips64 #define tcg_reg_alloc_start tcg_reg_alloc_start_mips64 #define tcg_reg_free tcg_reg_free_mips64 -#define tcg_register_jit tcg_register_jit_mips64 -#define tcg_register_jit_int tcg_register_jit_int_mips64 #define tcg_reg_sync tcg_reg_sync_mips64 #define tcg_set_frame tcg_set_frame_mips64 #define tcg_set_nop tcg_set_nop_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 522f998c..60315919 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_mips64el #define tcg_reg_alloc_start tcg_reg_alloc_start_mips64el #define tcg_reg_free tcg_reg_free_mips64el -#define tcg_register_jit tcg_register_jit_mips64el -#define tcg_register_jit_int tcg_register_jit_int_mips64el #define tcg_reg_sync tcg_reg_sync_mips64el #define tcg_set_frame tcg_set_frame_mips64el #define tcg_set_nop tcg_set_nop_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index 26398a30..54c454f8 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_mipsel #define tcg_reg_alloc_start tcg_reg_alloc_start_mipsel #define tcg_reg_free tcg_reg_free_mipsel -#define tcg_register_jit tcg_register_jit_mipsel -#define tcg_register_jit_int tcg_register_jit_int_mipsel #define tcg_reg_sync tcg_reg_sync_mipsel #define tcg_set_frame tcg_set_frame_mipsel #define tcg_set_nop tcg_set_nop_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 35bf7578..7cd2c00d 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -8,6 +8,7 @@ #define phys_mem_clean phys_mem_clean_powerpc #define tb_cleanup tb_cleanup_powerpc #define memory_map memory_map_powerpc +#define memory_map_ptr memory_map_ptr_powerpc #define memory_unmap memory_unmap_powerpc #define memory_free memory_free_powerpc #define helper_raise_exception helper_raise_exception_powerpc @@ -2944,6 +2945,7 @@ #define tcg_init tcg_init_powerpc #define tcg_invert_cond tcg_invert_cond_powerpc #define tcg_la_bb_end tcg_la_bb_end_powerpc +#define tcg_la_br_end tcg_la_br_end_powerpc #define tcg_la_func_end tcg_la_func_end_powerpc #define tcg_liveness_analysis tcg_liveness_analysis_powerpc #define tcg_malloc tcg_malloc_powerpc @@ -3014,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_powerpc #define tcg_reg_alloc_start tcg_reg_alloc_start_powerpc #define tcg_reg_free tcg_reg_free_powerpc -#define tcg_register_jit tcg_register_jit_powerpc -#define tcg_register_jit_int tcg_register_jit_int_powerpc #define tcg_reg_sync tcg_reg_sync_powerpc #define tcg_set_frame tcg_set_frame_powerpc #define tcg_set_nop tcg_set_nop_powerpc diff --git a/qemu/sparc.h b/qemu/sparc.h index 6a5cb27e..c30dd375 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_sparc #define tcg_reg_alloc_start tcg_reg_alloc_start_sparc #define tcg_reg_free tcg_reg_free_sparc -#define tcg_register_jit tcg_register_jit_sparc -#define tcg_register_jit_int tcg_register_jit_int_sparc #define tcg_reg_sync tcg_reg_sync_sparc #define tcg_set_frame tcg_set_frame_sparc #define tcg_set_nop tcg_set_nop_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index e67bbf00..c7824ebf 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_sparc64 #define tcg_reg_alloc_start tcg_reg_alloc_start_sparc64 #define tcg_reg_free tcg_reg_free_sparc64 -#define tcg_register_jit tcg_register_jit_sparc64 -#define tcg_register_jit_int tcg_register_jit_int_sparc64 #define tcg_reg_sync tcg_reg_sync_sparc64 #define tcg_set_frame tcg_set_frame_sparc64 #define tcg_set_nop tcg_set_nop_sparc64 diff --git a/qemu/target-i386/translate.c b/qemu/target-i386/translate.c index d661a007..285ba32c 100644 --- a/qemu/target-i386/translate.c +++ b/qemu/target-i386/translate.c @@ -4751,6 +4751,8 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s, bool changed_cc_op = false; + s->pc = pc_start; + // end address tells us to stop emulation if (s->pc == s->uc->addr_end) { // imitate the HLT instruction @@ -4781,7 +4783,6 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s, } } - s->pc = pc_start; prefixes = 0; s->override = -1; rex_w = -1; diff --git a/qemu/tcg/aarch64/tcg-target.c b/qemu/tcg/aarch64/tcg-target.c index 6e0172fb..6dff1756 100644 --- a/qemu/tcg/aarch64/tcg-target.c +++ b/qemu/tcg/aarch64/tcg-target.c @@ -1811,47 +1811,4 @@ static void tcg_target_qemu_prologue(TCGContext *s) tcg_out_insn(s, 3207, RET, TCG_REG_LR); } -typedef struct { - DebugFrameHeader h; - uint8_t fde_def_cfa[4]; - uint8_t fde_reg_ofs[24]; -} DebugFrame; - #define ELF_HOST_MACHINE EM_AARCH64 - -static const DebugFrame debug_frame = { - .h.cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .h.cie.id = -1, - .h.cie.version = 1, - .h.cie.code_align = 1, - .h.cie.data_align = 0x78, /* sleb128 -8 */ - .h.cie.return_column = TCG_REG_LR, - - /* Total FDE size does not include the "len" member. */ - .h.fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, h.fde.cie_offset), - - .fde_def_cfa = { - 12, TCG_REG_SP, /* DW_CFA_def_cfa sp, ... */ - (FRAME_SIZE & 0x7f) | 0x80, /* ... uleb128 FRAME_SIZE */ - (FRAME_SIZE >> 7) - }, - .fde_reg_ofs = { - 0x80 + 28, 1, /* DW_CFA_offset, x28, -8 */ - 0x80 + 27, 2, /* DW_CFA_offset, x27, -16 */ - 0x80 + 26, 3, /* DW_CFA_offset, x26, -24 */ - 0x80 + 25, 4, /* DW_CFA_offset, x25, -32 */ - 0x80 + 24, 5, /* DW_CFA_offset, x24, -40 */ - 0x80 + 23, 6, /* DW_CFA_offset, x23, -48 */ - 0x80 + 22, 7, /* DW_CFA_offset, x22, -56 */ - 0x80 + 21, 8, /* DW_CFA_offset, x21, -64 */ - 0x80 + 20, 9, /* DW_CFA_offset, x20, -72 */ - 0x80 + 19, 10, /* DW_CFA_offset, x1p, -80 */ - 0x80 + 30, 11, /* DW_CFA_offset, lr, -88 */ - 0x80 + 29, 12, /* DW_CFA_offset, fp, -96 */ - } -}; - -void tcg_register_jit(void *buf, size_t buf_size) -{ - tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); -} diff --git a/qemu/tcg/arm/tcg-target.c b/qemu/tcg/arm/tcg-target.c index 1851a99f..cabbd1f1 100644 --- a/qemu/tcg/arm/tcg-target.c +++ b/qemu/tcg/arm/tcg-target.c @@ -2076,48 +2076,4 @@ static void tcg_target_qemu_prologue(TCGContext *s) tcg_out32(s, (COND_AL << 28) | 0x08bd8ff0); } -typedef struct { - DebugFrameHeader h; - uint8_t fde_def_cfa[4]; - uint8_t fde_reg_ofs[18]; -} DebugFrame; - #define ELF_HOST_MACHINE EM_ARM - -/* We're expecting a 2 byte uleb128 encoded value. */ -QEMU_BUILD_BUG_ON(FRAME_SIZE >= (1 << 14)); - -static const DebugFrame debug_frame = { - .h.cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .h.cie.id = -1, - .h.cie.version = 1, - .h.cie.code_align = 1, - .h.cie.data_align = 0x7c, /* sleb128 -4 */ - .h.cie.return_column = 14, - - /* Total FDE size does not include the "len" member. */ - .h.fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, h.fde.cie_offset), - - .fde_def_cfa = { - 12, 13, /* DW_CFA_def_cfa sp, ... */ - (FRAME_SIZE & 0x7f) | 0x80, /* ... uleb128 FRAME_SIZE */ - (FRAME_SIZE >> 7) - }, - .fde_reg_ofs = { - /* The following must match the stmdb in the prologue. */ - 0x8e, 1, /* DW_CFA_offset, lr, -4 */ - 0x8b, 2, /* DW_CFA_offset, r11, -8 */ - 0x8a, 3, /* DW_CFA_offset, r10, -12 */ - 0x89, 4, /* DW_CFA_offset, r9, -16 */ - 0x88, 5, /* DW_CFA_offset, r8, -20 */ - 0x87, 6, /* DW_CFA_offset, r7, -24 */ - 0x86, 7, /* DW_CFA_offset, r6, -28 */ - 0x85, 8, /* DW_CFA_offset, r5, -32 */ - 0x84, 9, /* DW_CFA_offset, r4, -36 */ - } -}; - -void tcg_register_jit(void *buf, size_t buf_size) -{ - tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); -} diff --git a/qemu/tcg/i386/tcg-target.c b/qemu/tcg/i386/tcg-target.c index 26527430..aa06cc18 100644 --- a/qemu/tcg/i386/tcg-target.c +++ b/qemu/tcg/i386/tcg-target.c @@ -2331,79 +2331,3 @@ static void tcg_target_init(TCGContext *s) tcg_add_target_add_op_defs(s, x86_op_defs); } - -typedef struct { - DebugFrameHeader h; - uint8_t fde_def_cfa[4]; - uint8_t fde_reg_ofs[14]; -} DebugFrame; - -/* We're expecting a 2 byte uleb128 encoded value. */ -QEMU_BUILD_BUG_ON(FRAME_SIZE >= (1 << 14)); - -#if !defined(__ELF__) - /* Host machine without ELF. */ -#elif TCG_TARGET_REG_BITS == 64 -#define ELF_HOST_MACHINE EM_X86_64 -static const DebugFrame debug_frame = { - .h.cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .h.cie.id = -1, - .h.cie.version = 1, - .h.cie.code_align = 1, - .h.cie.data_align = 0x78, /* sleb128 -8 */ - .h.cie.return_column = 16, - - /* Total FDE size does not include the "len" member. */ - .h.fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, h.fde.cie_offset), - - .fde_def_cfa = { - 12, 7, /* DW_CFA_def_cfa %rsp, ... */ - (FRAME_SIZE & 0x7f) | 0x80, /* ... uleb128 FRAME_SIZE */ - (FRAME_SIZE >> 7) - }, - .fde_reg_ofs = { - 0x90, 1, /* DW_CFA_offset, %rip, -8 */ - /* The following ordering must match tcg_target_callee_save_regs. */ - 0x86, 2, /* DW_CFA_offset, %rbp, -16 */ - 0x83, 3, /* DW_CFA_offset, %rbx, -24 */ - 0x8c, 4, /* DW_CFA_offset, %r12, -32 */ - 0x8d, 5, /* DW_CFA_offset, %r13, -40 */ - 0x8e, 6, /* DW_CFA_offset, %r14, -48 */ - 0x8f, 7, /* DW_CFA_offset, %r15, -56 */ - } -}; -#else -#define ELF_HOST_MACHINE EM_386 -static const DebugFrame debug_frame = { - .h.cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .h.cie.id = -1, - .h.cie.version = 1, - .h.cie.code_align = 1, - .h.cie.data_align = 0x7c, /* sleb128 -4 */ - .h.cie.return_column = 8, - - /* Total FDE size does not include the "len" member. */ - .h.fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, h.fde.cie_offset), - - .fde_def_cfa = { - 12, 4, /* DW_CFA_def_cfa %esp, ... */ - (FRAME_SIZE & 0x7f) | 0x80, /* ... uleb128 FRAME_SIZE */ - (FRAME_SIZE >> 7) - }, - .fde_reg_ofs = { - 0x88, 1, /* DW_CFA_offset, %eip, -4 */ - /* The following ordering must match tcg_target_callee_save_regs. */ - 0x85, 2, /* DW_CFA_offset, %ebp, -8 */ - 0x83, 3, /* DW_CFA_offset, %ebx, -12 */ - 0x86, 4, /* DW_CFA_offset, %esi, -16 */ - 0x87, 5, /* DW_CFA_offset, %edi, -20 */ - } -}; -#endif - -#if defined(ELF_HOST_MACHINE) -void tcg_register_jit(void *buf, size_t buf_size) -{ - tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); -} -#endif diff --git a/qemu/tcg/ppc/tcg-target.c b/qemu/tcg/ppc/tcg-target.c index 2d9577d1..c713345d 100644 --- a/qemu/tcg/ppc/tcg-target.c +++ b/qemu/tcg/ppc/tcg-target.c @@ -2568,59 +2568,11 @@ static void tcg_target_init(TCGContext *s) } #ifdef __ELF__ -typedef struct { - DebugFrameCIE cie; - DebugFrameFDEHeader fde; - uint8_t fde_def_cfa[4]; - uint8_t fde_reg_ofs[ARRAY_SIZE(tcg_target_callee_save_regs) * 2 + 3]; -} DebugFrame; - -/* We're expecting a 2 byte uleb128 encoded value. */ -QEMU_BUILD_BUG_ON(FRAME_SIZE >= (1 << 14)); - #if TCG_TARGET_REG_BITS == 64 # define ELF_HOST_MACHINE EM_PPC64 #else # define ELF_HOST_MACHINE EM_PPC #endif - -static DebugFrame debug_frame = { - .cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .cie.id = -1, - .cie.version = 1, - .cie.code_align = 1, - .cie.data_align = (-SZR & 0x7f), /* sleb128 -SZR */ - .cie.return_column = 65, - - /* Total FDE size does not include the "len" member. */ - .fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, fde.cie_offset), - - .fde_def_cfa = { - 12, TCG_REG_R1, /* DW_CFA_def_cfa r1, ... */ - (FRAME_SIZE & 0x7f) | 0x80, /* ... uleb128 FRAME_SIZE */ - (FRAME_SIZE >> 7) - }, - .fde_reg_ofs = { - /* DW_CFA_offset_extended_sf, lr, LR_OFFSET */ - 0x11, 65, (LR_OFFSET / -SZR) & 0x7f, - } -}; - -void tcg_register_jit(void *buf, size_t buf_size) -{ - uint8_t *p = &debug_frame.fde_reg_ofs[3]; - int i; - - for (i = 0; i < ARRAY_SIZE(tcg_target_callee_save_regs); ++i, p += 2) { - p[0] = 0x80 + tcg_target_callee_save_regs[i]; - p[1] = (FRAME_SIZE - (REG_SAVE_BOT + i * SZR)) / SZR; - } - - debug_frame.fde.func_start = (uintptr_t)buf; - debug_frame.fde.func_len = buf_size; - - tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); -} #endif /* __ELF__ */ static size_t dcache_bsize = 16; diff --git a/qemu/tcg/s390/tcg-target.c b/qemu/tcg/s390/tcg-target.c index 668e8648..cfa89874 100644 --- a/qemu/tcg/s390/tcg-target.c +++ b/qemu/tcg/s390/tcg-target.c @@ -2343,47 +2343,4 @@ static void tcg_target_qemu_prologue(TCGContext *s) tcg_out_insn(s, RR, BCR, S390_CC_ALWAYS, TCG_REG_R14); } -typedef struct { - DebugFrameHeader h; - uint8_t fde_def_cfa[4]; - uint8_t fde_reg_ofs[18]; -} DebugFrame; - -/* We're expecting a 2 byte uleb128 encoded value. */ -QEMU_BUILD_BUG_ON(FRAME_SIZE >= (1 << 14)); - #define ELF_HOST_MACHINE EM_S390 - -static const DebugFrame debug_frame = { - .h.cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .h.cie.id = -1, - .h.cie.version = 1, - .h.cie.code_align = 1, - .h.cie.data_align = 8, /* sleb128 8 */ - .h.cie.return_column = TCG_REG_R14, - - /* Total FDE size does not include the "len" member. */ - .h.fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, h.fde.cie_offset), - - .fde_def_cfa = { - 12, TCG_REG_CALL_STACK, /* DW_CFA_def_cfa %r15, ... */ - (FRAME_SIZE & 0x7f) | 0x80, /* ... uleb128 FRAME_SIZE */ - (FRAME_SIZE >> 7) - }, - .fde_reg_ofs = { - 0x86, 6, /* DW_CFA_offset, %r6, 48 */ - 0x87, 7, /* DW_CFA_offset, %r7, 56 */ - 0x88, 8, /* DW_CFA_offset, %r8, 64 */ - 0x89, 9, /* DW_CFA_offset, %r92, 72 */ - 0x8a, 10, /* DW_CFA_offset, %r10, 80 */ - 0x8b, 11, /* DW_CFA_offset, %r11, 88 */ - 0x8c, 12, /* DW_CFA_offset, %r12, 96 */ - 0x8d, 13, /* DW_CFA_offset, %r13, 104 */ - 0x8e, 14, /* DW_CFA_offset, %r14, 112 */ - } -}; - -void tcg_register_jit(void *buf, size_t buf_size) -{ - tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); -} diff --git a/qemu/tcg/sparc/tcg-target.c b/qemu/tcg/sparc/tcg-target.c index 6eef1936..a768be89 100644 --- a/qemu/tcg/sparc/tcg-target.c +++ b/qemu/tcg/sparc/tcg-target.c @@ -1599,41 +1599,6 @@ static void tcg_target_init(TCGContext *s) # define ELF_HOST_FLAGS EF_SPARC_32PLUS #endif -typedef struct { - DebugFrameHeader h; - uint8_t fde_def_cfa[SPARC64 ? 4 : 2]; - uint8_t fde_win_save; - uint8_t fde_ret_save[3]; -} DebugFrame; - -static const DebugFrame debug_frame = { - .h.cie.len = sizeof(DebugFrameCIE)-4, /* length after .len member */ - .h.cie.id = -1, - .h.cie.version = 1, - .h.cie.code_align = 1, - .h.cie.data_align = -sizeof(void *) & 0x7f, - .h.cie.return_column = 15, /* o7 */ - - /* Total FDE size does not include the "len" member. */ - .h.fde.len = sizeof(DebugFrame) - offsetof(DebugFrame, h.fde.cie_offset), - - .fde_def_cfa = { -#if SPARC64 - 12, 30, /* DW_CFA_def_cfa i6, 2047 */ - (2047 & 0x7f) | 0x80, (2047 >> 7) -#else - 13, 30 /* DW_CFA_def_cfa_register i6 */ -#endif - }, - .fde_win_save = 0x2d, /* DW_CFA_GNU_window_save */ - .fde_ret_save = { 9, 15, 31 }, /* DW_CFA_register o7, i7 */ -}; - -void tcg_register_jit(void *buf, size_t buf_size) -{ - tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); -} - void tb_set_jmp_target1(uintptr_t jmp_addr, uintptr_t addr) { uint32_t *ptr = (uint32_t *)jmp_addr; diff --git a/qemu/tcg/tcg.c b/qemu/tcg/tcg.c index f7958553..6c0a09cf 100644 --- a/qemu/tcg/tcg.c +++ b/qemu/tcg/tcg.c @@ -90,11 +90,6 @@ typedef struct QEMU_PACKED { DebugFrameFDEHeader fde; } DebugFrameHeader; -static void tcg_register_jit_int(void *buf, size_t size, - const void *debug_frame, - size_t debug_frame_size) - __attribute__((unused)); - /* Forward declarations for functions declared and used in tcg-target.c. */ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str); static void tcg_out_ld(TCGContext *s, TCGType type, TCGReg ret, TCGReg arg1, @@ -2685,274 +2680,3 @@ void tcg_dump_info(FILE *f, fprintf_function cpu_fprintf) cpu_fprintf(f, "[TCG profiler not compiled]\n"); } #endif - -#ifdef ELF_HOST_MACHINE -/* In order to use this feature, the backend needs to do three things: - - (1) Define ELF_HOST_MACHINE to indicate both what value to - put into the ELF image and to indicate support for the feature. - - (2) Define tcg_register_jit. This should create a buffer containing - the contents of a .debug_frame section that describes the post- - prologue unwind info for the tcg machine. - - (3) Call tcg_register_jit_int, with the constructed .debug_frame. -*/ - -/* Begin GDB interface. THE FOLLOWING MUST MATCH GDB DOCS. */ -typedef enum { - JIT_NOACTION = 0, - JIT_REGISTER_FN, - JIT_UNREGISTER_FN -} jit_actions_t; - -struct jit_code_entry { - struct jit_code_entry *next_entry; - struct jit_code_entry *prev_entry; - const void *symfile_addr; - uint64_t symfile_size; -}; - -struct jit_descriptor { - uint32_t version; - uint32_t action_flag; - struct jit_code_entry *relevant_entry; - struct jit_code_entry *first_entry; -}; - -void __jit_debug_register_code(void) __attribute__((noinline)); -void __jit_debug_register_code(void) -{ - asm(""); -} - -/* Must statically initialize the version, because GDB may check - the version before we can set it. */ -struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; - -/* End GDB interface. */ - -static int find_string(const char *strtab, const char *str) -{ - const char *p = strtab + 1; - - while (1) { - if (strcmp(p, str) == 0) { - return p - strtab; - } - p += strlen(p) + 1; - } -} - -static void tcg_register_jit_int(void *buf_ptr, size_t buf_size, - const void *debug_frame, - size_t debug_frame_size) -{ - struct __attribute__((packed)) DebugInfo { - uint32_t len; - uint16_t version; - uint32_t abbrev; - uint8_t ptr_size; - uint8_t cu_die; - uint16_t cu_lang; - uintptr_t cu_low_pc; - uintptr_t cu_high_pc; - uint8_t fn_die; - char fn_name[16]; - uintptr_t fn_low_pc; - uintptr_t fn_high_pc; - uint8_t cu_eoc; - }; - - struct ElfImage { - ElfW(Ehdr) ehdr; - ElfW(Phdr) phdr; - ElfW(Shdr) shdr[7]; - ElfW(Sym) sym[2]; - struct DebugInfo di; - uint8_t da[24]; - char str[80]; - }; - - struct ElfImage *img; - - static const struct ElfImage img_template = { - .ehdr = { - .e_ident[EI_MAG0] = ELFMAG0, - .e_ident[EI_MAG1] = ELFMAG1, - .e_ident[EI_MAG2] = ELFMAG2, - .e_ident[EI_MAG3] = ELFMAG3, - .e_ident[EI_CLASS] = ELF_CLASS, - .e_ident[EI_DATA] = ELF_DATA, - .e_ident[EI_VERSION] = EV_CURRENT, - .e_type = ET_EXEC, - .e_machine = ELF_HOST_MACHINE, - .e_version = EV_CURRENT, - .e_phoff = offsetof(struct ElfImage, phdr), - .e_shoff = offsetof(struct ElfImage, shdr), - .e_ehsize = sizeof(ElfW(Shdr)), - .e_phentsize = sizeof(ElfW(Phdr)), - .e_phnum = 1, - .e_shentsize = sizeof(ElfW(Shdr)), - .e_shnum = ARRAY_SIZE(img->shdr), - .e_shstrndx = ARRAY_SIZE(img->shdr) - 1, -#ifdef ELF_HOST_FLAGS - .e_flags = ELF_HOST_FLAGS, -#endif -#ifdef ELF_OSABI - .e_ident[EI_OSABI] = ELF_OSABI, -#endif - }, - .phdr = { - .p_type = PT_LOAD, - .p_flags = PF_X, - }, - .shdr = { - [0] = { .sh_type = SHT_NULL }, - /* Trick: The contents of code_gen_buffer are not present in - this fake ELF file; that got allocated elsewhere. Therefore - we mark .text as SHT_NOBITS (similar to .bss) so that readers - will not look for contents. We can record any address. */ - [1] = { /* .text */ - .sh_type = SHT_NOBITS, - .sh_flags = SHF_EXECINSTR | SHF_ALLOC, - }, - [2] = { /* .debug_info */ - .sh_type = SHT_PROGBITS, - .sh_offset = offsetof(struct ElfImage, di), - .sh_size = sizeof(struct DebugInfo), - }, - [3] = { /* .debug_abbrev */ - .sh_type = SHT_PROGBITS, - .sh_offset = offsetof(struct ElfImage, da), - .sh_size = sizeof(img->da), - }, - [4] = { /* .debug_frame */ - .sh_type = SHT_PROGBITS, - .sh_offset = sizeof(struct ElfImage), - }, - [5] = { /* .symtab */ - .sh_type = SHT_SYMTAB, - .sh_offset = offsetof(struct ElfImage, sym), - .sh_size = sizeof(img->sym), - .sh_info = 1, - .sh_link = ARRAY_SIZE(img->shdr) - 1, - .sh_entsize = sizeof(ElfW(Sym)), - }, - [6] = { /* .strtab */ - .sh_type = SHT_STRTAB, - .sh_offset = offsetof(struct ElfImage, str), - .sh_size = sizeof(img->str), - } - }, - .sym = { - [1] = { /* code_gen_buffer */ - .st_info = ELF_ST_INFO(STB_GLOBAL, STT_FUNC), - .st_shndx = 1, - } - }, - .di = { - .len = sizeof(struct DebugInfo) - 4, - .version = 2, - .ptr_size = sizeof(void *), - .cu_die = 1, - .cu_lang = 0x8001, /* DW_LANG_Mips_Assembler */ - .fn_die = 2, - .fn_name = "code_gen_buffer" - }, - .da = { - 1, /* abbrev number (the cu) */ - 0x11, 1, /* DW_TAG_compile_unit, has children */ - 0x13, 0x5, /* DW_AT_language, DW_FORM_data2 */ - 0x11, 0x1, /* DW_AT_low_pc, DW_FORM_addr */ - 0x12, 0x1, /* DW_AT_high_pc, DW_FORM_addr */ - 0, 0, /* end of abbrev */ - 2, /* abbrev number (the fn) */ - 0x2e, 0, /* DW_TAG_subprogram, no children */ - 0x3, 0x8, /* DW_AT_name, DW_FORM_string */ - 0x11, 0x1, /* DW_AT_low_pc, DW_FORM_addr */ - 0x12, 0x1, /* DW_AT_high_pc, DW_FORM_addr */ - 0, 0, /* end of abbrev */ - 0 /* no more abbrev */ - }, - .str = "\0" ".text\0" ".debug_info\0" ".debug_abbrev\0" - ".debug_frame\0" ".symtab\0" ".strtab\0" "code_gen_buffer", - }; - - /* We only need a single jit entry; statically allocate it. */ - static struct jit_code_entry one_entry; - - uintptr_t buf = (uintptr_t)buf_ptr; - size_t img_size = sizeof(struct ElfImage) + debug_frame_size; - DebugFrameHeader *dfh; - - img = g_malloc(img_size); - *img = img_template; - - img->phdr.p_vaddr = buf; - img->phdr.p_paddr = buf; - img->phdr.p_memsz = buf_size; - - img->shdr[1].sh_name = find_string(img->str, ".text"); - img->shdr[1].sh_addr = buf; - img->shdr[1].sh_size = buf_size; - - img->shdr[2].sh_name = find_string(img->str, ".debug_info"); - img->shdr[3].sh_name = find_string(img->str, ".debug_abbrev"); - - img->shdr[4].sh_name = find_string(img->str, ".debug_frame"); - img->shdr[4].sh_size = debug_frame_size; - - img->shdr[5].sh_name = find_string(img->str, ".symtab"); - img->shdr[6].sh_name = find_string(img->str, ".strtab"); - - img->sym[1].st_name = find_string(img->str, "code_gen_buffer"); - img->sym[1].st_value = buf; - img->sym[1].st_size = buf_size; - - img->di.cu_low_pc = buf; - img->di.cu_high_pc = buf + buf_size; - img->di.fn_low_pc = buf; - img->di.fn_high_pc = buf + buf_size; - - dfh = (DebugFrameHeader *)(img + 1); - memcpy(dfh, debug_frame, debug_frame_size); - dfh->fde.func_start = buf; - dfh->fde.func_len = buf_size; - -#ifdef DEBUG_JIT - /* Enable this block to be able to debug the ELF image file creation. - One can use readelf, objdump, or other inspection utilities. */ - { - FILE *f = fopen("/tmp/qemu.jit", "w+b"); - if (f) { - if (fwrite(img, img_size, 1, f) != img_size) { - /* Avoid stupid unused return value warning for fwrite. */ - } - fclose(f); - } - } -#endif - - one_entry.symfile_addr = img; - one_entry.symfile_size = img_size; - - __jit_debug_descriptor.action_flag = JIT_REGISTER_FN; - __jit_debug_descriptor.relevant_entry = &one_entry; - __jit_debug_descriptor.first_entry = &one_entry; - __jit_debug_register_code(); -} -#else -/* No support for the feature. Provide the entry point expected by exec.c, - and implement the internal function we declared earlier. */ - -static void tcg_register_jit_int(void *buf, size_t size, - const void *debug_frame, - size_t debug_frame_size) -{ -} - -void tcg_register_jit(void *buf, size_t buf_size) -{ -} -#endif /* ELF_HOST_MACHINE */ diff --git a/qemu/tcg/tcg.h b/qemu/tcg/tcg.h index 9b634352..64cc8867 100644 --- a/qemu/tcg/tcg.h +++ b/qemu/tcg/tcg.h @@ -936,8 +936,6 @@ static inline size_t tcg_current_code_size(TCGContext *s) ((uintptr_t (*)(void *, void *))tcg_ctx->code_gen_prologue)(env, tb_ptr) #endif -void tcg_register_jit(void *buf, size_t buf_size); - /* * Memory helpers that will be used by TCG generated code. */ diff --git a/qemu/translate-all.c b/qemu/translate-all.c index 088e7b40..11bbb07b 100644 --- a/qemu/translate-all.c +++ b/qemu/translate-all.c @@ -723,7 +723,6 @@ void tcg_exec_init(struct uc_struct *uc, unsigned long tb_size) tcg_ctx = uc->tcg_ctx; tcg_ctx->code_gen_ptr = tcg_ctx->code_gen_buffer; tcg_ctx->uc = uc; - tcg_register_jit(tcg_ctx->code_gen_buffer, tcg_ctx->code_gen_buffer_size); page_init(); #if !defined(CONFIG_USER_ONLY) || !defined(CONFIG_USE_GUEST_BASE) /* There's no guest base to take into account, so go ahead and diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 57b72a98..340e4e08 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -3016,8 +3016,6 @@ #define tcg_reg_alloc_op tcg_reg_alloc_op_x86_64 #define tcg_reg_alloc_start tcg_reg_alloc_start_x86_64 #define tcg_reg_free tcg_reg_free_x86_64 -#define tcg_register_jit tcg_register_jit_x86_64 -#define tcg_register_jit_int tcg_register_jit_int_x86_64 #define tcg_reg_sync tcg_reg_sync_x86_64 #define tcg_set_frame tcg_set_frame_x86_64 #define tcg_set_nop tcg_set_nop_x86_64 diff --git a/tests/regress/mem_nofree.c b/tests/regress/mem_nofree.c index 72add193..12b620f7 100644 --- a/tests/regress/mem_nofree.c +++ b/tests/regress/mem_nofree.c @@ -5,8 +5,8 @@ #include -#define ADDRESS1 0x1000000 -#define ADDRESS2 0x2000000 +#define ADDRESS1 0x10000000 +#define ADDRESS2 0x20000000 #define SIZE (80 * 1024 * 1024) static void VM_exec() diff --git a/tests/regress/mem_unmap.c b/tests/regress/mem_unmap.c index 98e209f0..16a9f88a 100644 --- a/tests/regress/mem_unmap.c +++ b/tests/regress/mem_unmap.c @@ -135,7 +135,7 @@ static bool hook_mem_invalid(uc_engine *uc, uc_mem_type type, default: printf("not ok %d - memory invalid type: %d at 0x%" PRIx64 "\n", log_num++, type, addr); return false; - case UC_MEM_WRITE: + case UC_MEM_WRITE_UNMAPPED: printf("# write to invalid memory at 0x%"PRIx64 ", data size = %u, data value = 0x%"PRIx64 "\n", addr, size, value); if (uc_mem_read(uc, addr, &testval, sizeof(testval)) != UC_ERR_OK) {