diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 000000000..15a15b218
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 000000000..37a750962
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 000000000..eff2b3529
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 000000000..7f68460d8
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 000000000..796b96d1c
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
new file mode 100644
index 000000000..8cf932662
--- /dev/null
+++ b/app/CMakeLists.txt
@@ -0,0 +1,54 @@
+# For more information about using CMake with Android Studio, read the
+# documentation: https://d.android.com/studio/projects/add-native-code.html
+
+# Sets the minimum version of CMake required to build the native library.
+
+cmake_minimum_required(VERSION 3.4.1)
+
+set(unicorn_DIR ${CMAKE_SOURCE_DIR}/src/main/cpp/unicorn)
+
+include_directories(${unicorn_DIR}/lib/${ANDROID_ABI}/include)
+
+add_library(unicorn SHARED IMPORTED)
+set_target_properties(unicorn PROPERTIES IMPORTED_LOCATION
+ ${unicorn_DIR}/lib/${ANDROID_ABI}/libunicorn.so)
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+
+add_library( # Sets the name of the library.
+ native-lib
+
+ # Sets the library as a shared library.
+ SHARED
+
+ # Provides a relative path to your source file(s).
+ src/main/cpp/native-lib.cpp)
+
+# Searches for a specified prebuilt library and stores the path as a
+# variable. Because CMake includes system libraries in the search path by
+# default, you only need to specify the name of the public NDK library
+# you want to add. CMake verifies that the library exists before
+# completing its build.
+
+find_library( # Sets the name of the path variable.
+ log-lib
+
+ # Specifies the name of the NDK library that
+ # you want CMake to locate.
+ log)
+
+# Specifies libraries CMake should link to your target library. You
+# can link multiple libraries, such as libraries you define in this
+# build script, prebuilt third-party libraries, or system libraries.
+
+target_link_libraries( # Specifies the target library.
+ native-lib
+
+ unicorn
+
+ # Links the target library to the log library
+ # included in the NDK.
+ ${log-lib})
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 000000000..d69758051
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,48 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.0"
+ defaultConfig {
+ applicationId "gq.cyuubi.lightswitch"
+ minSdkVersion 22
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ externalNativeBuild {
+ cmake {
+ cppFlags ""
+ }
+ }
+ ndk {
+ abiFilters "arm64-v8a"
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ version "3.10.2"
+ }
+ }
+ sourceSets {
+ main {
+ jni.srcDirs = ['src/main/cpp/unicorn/lib']
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 000000000..f1b424510
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/gq/cyuubi/lightswitch/ExampleInstrumentedTest.java b/app/src/androidTest/java/gq/cyuubi/lightswitch/ExampleInstrumentedTest.java
new file mode 100644
index 000000000..eebc10c1e
--- /dev/null
+++ b/app/src/androidTest/java/gq/cyuubi/lightswitch/ExampleInstrumentedTest.java
@@ -0,0 +1,27 @@
+package gq.cyuubi.lightswitch;
+
+import android.content.Context;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("gq.cyuubi.lightswitch", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..1bbb47782
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/cpp/native-lib.cpp b/app/src/main/cpp/native-lib.cpp
new file mode 100644
index 000000000..19b394eff
--- /dev/null
+++ b/app/src/main/cpp/native-lib.cpp
@@ -0,0 +1,19 @@
+#include
+#include
+
+#include
+
+extern "C" JNIEXPORT jstring JNICALL
+Java_gq_cyuubi_lightswitch_MainActivity_stringFromJNI(
+ JNIEnv *env,
+ jobject /* this */) {
+ uc_engine *uc;
+ uc_err err;
+ err = uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc);
+ if (err) {
+ std::string failed = "loading failed!";
+ return env->NewStringUTF(failed.c_str());
+ }
+ std::string hello = "loaded successfully!";
+ return env->NewStringUTF(hello.c_str());
+}
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm.h
new file mode 100644
index 000000000..a0fd83e3a
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm.h
@@ -0,0 +1,157 @@
+/* Unicorn Engine */
+/* By Nguyen Anh Quynh , 2015-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_ARM_H
+#define UNICORN_ARM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#endif
+
+//> ARM registers
+typedef enum uc_arm_reg {
+ UC_ARM_REG_INVALID = 0,
+ UC_ARM_REG_APSR,
+ UC_ARM_REG_APSR_NZCV,
+ UC_ARM_REG_CPSR,
+ UC_ARM_REG_FPEXC,
+ UC_ARM_REG_FPINST,
+ UC_ARM_REG_FPSCR,
+ UC_ARM_REG_FPSCR_NZCV,
+ UC_ARM_REG_FPSID,
+ UC_ARM_REG_ITSTATE,
+ UC_ARM_REG_LR,
+ UC_ARM_REG_PC,
+ UC_ARM_REG_SP,
+ UC_ARM_REG_SPSR,
+ UC_ARM_REG_D0,
+ UC_ARM_REG_D1,
+ UC_ARM_REG_D2,
+ UC_ARM_REG_D3,
+ UC_ARM_REG_D4,
+ UC_ARM_REG_D5,
+ UC_ARM_REG_D6,
+ UC_ARM_REG_D7,
+ UC_ARM_REG_D8,
+ UC_ARM_REG_D9,
+ UC_ARM_REG_D10,
+ UC_ARM_REG_D11,
+ UC_ARM_REG_D12,
+ UC_ARM_REG_D13,
+ UC_ARM_REG_D14,
+ UC_ARM_REG_D15,
+ UC_ARM_REG_D16,
+ UC_ARM_REG_D17,
+ UC_ARM_REG_D18,
+ UC_ARM_REG_D19,
+ UC_ARM_REG_D20,
+ UC_ARM_REG_D21,
+ UC_ARM_REG_D22,
+ UC_ARM_REG_D23,
+ UC_ARM_REG_D24,
+ UC_ARM_REG_D25,
+ UC_ARM_REG_D26,
+ UC_ARM_REG_D27,
+ UC_ARM_REG_D28,
+ UC_ARM_REG_D29,
+ UC_ARM_REG_D30,
+ UC_ARM_REG_D31,
+ UC_ARM_REG_FPINST2,
+ UC_ARM_REG_MVFR0,
+ UC_ARM_REG_MVFR1,
+ UC_ARM_REG_MVFR2,
+ UC_ARM_REG_Q0,
+ UC_ARM_REG_Q1,
+ UC_ARM_REG_Q2,
+ UC_ARM_REG_Q3,
+ UC_ARM_REG_Q4,
+ UC_ARM_REG_Q5,
+ UC_ARM_REG_Q6,
+ UC_ARM_REG_Q7,
+ UC_ARM_REG_Q8,
+ UC_ARM_REG_Q9,
+ UC_ARM_REG_Q10,
+ UC_ARM_REG_Q11,
+ UC_ARM_REG_Q12,
+ UC_ARM_REG_Q13,
+ UC_ARM_REG_Q14,
+ UC_ARM_REG_Q15,
+ UC_ARM_REG_R0,
+ UC_ARM_REG_R1,
+ UC_ARM_REG_R2,
+ UC_ARM_REG_R3,
+ UC_ARM_REG_R4,
+ UC_ARM_REG_R5,
+ UC_ARM_REG_R6,
+ UC_ARM_REG_R7,
+ UC_ARM_REG_R8,
+ UC_ARM_REG_R9,
+ UC_ARM_REG_R10,
+ UC_ARM_REG_R11,
+ UC_ARM_REG_R12,
+ UC_ARM_REG_S0,
+ UC_ARM_REG_S1,
+ UC_ARM_REG_S2,
+ UC_ARM_REG_S3,
+ UC_ARM_REG_S4,
+ UC_ARM_REG_S5,
+ UC_ARM_REG_S6,
+ UC_ARM_REG_S7,
+ UC_ARM_REG_S8,
+ UC_ARM_REG_S9,
+ UC_ARM_REG_S10,
+ UC_ARM_REG_S11,
+ UC_ARM_REG_S12,
+ UC_ARM_REG_S13,
+ UC_ARM_REG_S14,
+ UC_ARM_REG_S15,
+ UC_ARM_REG_S16,
+ UC_ARM_REG_S17,
+ UC_ARM_REG_S18,
+ UC_ARM_REG_S19,
+ UC_ARM_REG_S20,
+ UC_ARM_REG_S21,
+ UC_ARM_REG_S22,
+ UC_ARM_REG_S23,
+ UC_ARM_REG_S24,
+ UC_ARM_REG_S25,
+ UC_ARM_REG_S26,
+ UC_ARM_REG_S27,
+ UC_ARM_REG_S28,
+ UC_ARM_REG_S29,
+ UC_ARM_REG_S30,
+ UC_ARM_REG_S31,
+
+ UC_ARM_REG_C1_C0_2,
+ UC_ARM_REG_C13_C0_2,
+ UC_ARM_REG_C13_C0_3,
+
+ UC_ARM_REG_IPSR,
+ UC_ARM_REG_MSP,
+ UC_ARM_REG_PSP,
+ UC_ARM_REG_CONTROL,
+ UC_ARM_REG_ENDING, // <-- mark the end of the list or registers
+
+ //> alias registers
+ UC_ARM_REG_R13 = UC_ARM_REG_SP,
+ UC_ARM_REG_R14 = UC_ARM_REG_LR,
+ UC_ARM_REG_R15 = UC_ARM_REG_PC,
+
+ UC_ARM_REG_SB = UC_ARM_REG_R9,
+ UC_ARM_REG_SL = UC_ARM_REG_R10,
+ UC_ARM_REG_FP = UC_ARM_REG_R11,
+ UC_ARM_REG_IP = UC_ARM_REG_R12,
+} uc_arm_reg;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm64.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm64.h
new file mode 100644
index 000000000..fe46f1590
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm64.h
@@ -0,0 +1,307 @@
+/* Unicorn Emulator Engine */
+/* By Nguyen Anh Quynh , 2015-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_ARM64_H
+#define UNICORN_ARM64_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#endif
+
+//> ARM64 registers
+typedef enum uc_arm64_reg {
+ UC_ARM64_REG_INVALID = 0,
+
+ UC_ARM64_REG_X29,
+ UC_ARM64_REG_X30,
+ UC_ARM64_REG_NZCV,
+ UC_ARM64_REG_SP,
+ UC_ARM64_REG_WSP,
+ UC_ARM64_REG_WZR,
+ UC_ARM64_REG_XZR,
+ UC_ARM64_REG_B0,
+ UC_ARM64_REG_B1,
+ UC_ARM64_REG_B2,
+ UC_ARM64_REG_B3,
+ UC_ARM64_REG_B4,
+ UC_ARM64_REG_B5,
+ UC_ARM64_REG_B6,
+ UC_ARM64_REG_B7,
+ UC_ARM64_REG_B8,
+ UC_ARM64_REG_B9,
+ UC_ARM64_REG_B10,
+ UC_ARM64_REG_B11,
+ UC_ARM64_REG_B12,
+ UC_ARM64_REG_B13,
+ UC_ARM64_REG_B14,
+ UC_ARM64_REG_B15,
+ UC_ARM64_REG_B16,
+ UC_ARM64_REG_B17,
+ UC_ARM64_REG_B18,
+ UC_ARM64_REG_B19,
+ UC_ARM64_REG_B20,
+ UC_ARM64_REG_B21,
+ UC_ARM64_REG_B22,
+ UC_ARM64_REG_B23,
+ UC_ARM64_REG_B24,
+ UC_ARM64_REG_B25,
+ UC_ARM64_REG_B26,
+ UC_ARM64_REG_B27,
+ UC_ARM64_REG_B28,
+ UC_ARM64_REG_B29,
+ UC_ARM64_REG_B30,
+ UC_ARM64_REG_B31,
+ UC_ARM64_REG_D0,
+ UC_ARM64_REG_D1,
+ UC_ARM64_REG_D2,
+ UC_ARM64_REG_D3,
+ UC_ARM64_REG_D4,
+ UC_ARM64_REG_D5,
+ UC_ARM64_REG_D6,
+ UC_ARM64_REG_D7,
+ UC_ARM64_REG_D8,
+ UC_ARM64_REG_D9,
+ UC_ARM64_REG_D10,
+ UC_ARM64_REG_D11,
+ UC_ARM64_REG_D12,
+ UC_ARM64_REG_D13,
+ UC_ARM64_REG_D14,
+ UC_ARM64_REG_D15,
+ UC_ARM64_REG_D16,
+ UC_ARM64_REG_D17,
+ UC_ARM64_REG_D18,
+ UC_ARM64_REG_D19,
+ UC_ARM64_REG_D20,
+ UC_ARM64_REG_D21,
+ UC_ARM64_REG_D22,
+ UC_ARM64_REG_D23,
+ UC_ARM64_REG_D24,
+ UC_ARM64_REG_D25,
+ UC_ARM64_REG_D26,
+ UC_ARM64_REG_D27,
+ UC_ARM64_REG_D28,
+ UC_ARM64_REG_D29,
+ UC_ARM64_REG_D30,
+ UC_ARM64_REG_D31,
+ UC_ARM64_REG_H0,
+ UC_ARM64_REG_H1,
+ UC_ARM64_REG_H2,
+ UC_ARM64_REG_H3,
+ UC_ARM64_REG_H4,
+ UC_ARM64_REG_H5,
+ UC_ARM64_REG_H6,
+ UC_ARM64_REG_H7,
+ UC_ARM64_REG_H8,
+ UC_ARM64_REG_H9,
+ UC_ARM64_REG_H10,
+ UC_ARM64_REG_H11,
+ UC_ARM64_REG_H12,
+ UC_ARM64_REG_H13,
+ UC_ARM64_REG_H14,
+ UC_ARM64_REG_H15,
+ UC_ARM64_REG_H16,
+ UC_ARM64_REG_H17,
+ UC_ARM64_REG_H18,
+ UC_ARM64_REG_H19,
+ UC_ARM64_REG_H20,
+ UC_ARM64_REG_H21,
+ UC_ARM64_REG_H22,
+ UC_ARM64_REG_H23,
+ UC_ARM64_REG_H24,
+ UC_ARM64_REG_H25,
+ UC_ARM64_REG_H26,
+ UC_ARM64_REG_H27,
+ UC_ARM64_REG_H28,
+ UC_ARM64_REG_H29,
+ UC_ARM64_REG_H30,
+ UC_ARM64_REG_H31,
+ UC_ARM64_REG_Q0,
+ UC_ARM64_REG_Q1,
+ UC_ARM64_REG_Q2,
+ UC_ARM64_REG_Q3,
+ UC_ARM64_REG_Q4,
+ UC_ARM64_REG_Q5,
+ UC_ARM64_REG_Q6,
+ UC_ARM64_REG_Q7,
+ UC_ARM64_REG_Q8,
+ UC_ARM64_REG_Q9,
+ UC_ARM64_REG_Q10,
+ UC_ARM64_REG_Q11,
+ UC_ARM64_REG_Q12,
+ UC_ARM64_REG_Q13,
+ UC_ARM64_REG_Q14,
+ UC_ARM64_REG_Q15,
+ UC_ARM64_REG_Q16,
+ UC_ARM64_REG_Q17,
+ UC_ARM64_REG_Q18,
+ UC_ARM64_REG_Q19,
+ UC_ARM64_REG_Q20,
+ UC_ARM64_REG_Q21,
+ UC_ARM64_REG_Q22,
+ UC_ARM64_REG_Q23,
+ UC_ARM64_REG_Q24,
+ UC_ARM64_REG_Q25,
+ UC_ARM64_REG_Q26,
+ UC_ARM64_REG_Q27,
+ UC_ARM64_REG_Q28,
+ UC_ARM64_REG_Q29,
+ UC_ARM64_REG_Q30,
+ UC_ARM64_REG_Q31,
+ UC_ARM64_REG_S0,
+ UC_ARM64_REG_S1,
+ UC_ARM64_REG_S2,
+ UC_ARM64_REG_S3,
+ UC_ARM64_REG_S4,
+ UC_ARM64_REG_S5,
+ UC_ARM64_REG_S6,
+ UC_ARM64_REG_S7,
+ UC_ARM64_REG_S8,
+ UC_ARM64_REG_S9,
+ UC_ARM64_REG_S10,
+ UC_ARM64_REG_S11,
+ UC_ARM64_REG_S12,
+ UC_ARM64_REG_S13,
+ UC_ARM64_REG_S14,
+ UC_ARM64_REG_S15,
+ UC_ARM64_REG_S16,
+ UC_ARM64_REG_S17,
+ UC_ARM64_REG_S18,
+ UC_ARM64_REG_S19,
+ UC_ARM64_REG_S20,
+ UC_ARM64_REG_S21,
+ UC_ARM64_REG_S22,
+ UC_ARM64_REG_S23,
+ UC_ARM64_REG_S24,
+ UC_ARM64_REG_S25,
+ UC_ARM64_REG_S26,
+ UC_ARM64_REG_S27,
+ UC_ARM64_REG_S28,
+ UC_ARM64_REG_S29,
+ UC_ARM64_REG_S30,
+ UC_ARM64_REG_S31,
+ UC_ARM64_REG_W0,
+ UC_ARM64_REG_W1,
+ UC_ARM64_REG_W2,
+ UC_ARM64_REG_W3,
+ UC_ARM64_REG_W4,
+ UC_ARM64_REG_W5,
+ UC_ARM64_REG_W6,
+ UC_ARM64_REG_W7,
+ UC_ARM64_REG_W8,
+ UC_ARM64_REG_W9,
+ UC_ARM64_REG_W10,
+ UC_ARM64_REG_W11,
+ UC_ARM64_REG_W12,
+ UC_ARM64_REG_W13,
+ UC_ARM64_REG_W14,
+ UC_ARM64_REG_W15,
+ UC_ARM64_REG_W16,
+ UC_ARM64_REG_W17,
+ UC_ARM64_REG_W18,
+ UC_ARM64_REG_W19,
+ UC_ARM64_REG_W20,
+ UC_ARM64_REG_W21,
+ UC_ARM64_REG_W22,
+ UC_ARM64_REG_W23,
+ UC_ARM64_REG_W24,
+ UC_ARM64_REG_W25,
+ UC_ARM64_REG_W26,
+ UC_ARM64_REG_W27,
+ UC_ARM64_REG_W28,
+ UC_ARM64_REG_W29,
+ UC_ARM64_REG_W30,
+ UC_ARM64_REG_X0,
+ UC_ARM64_REG_X1,
+ UC_ARM64_REG_X2,
+ UC_ARM64_REG_X3,
+ UC_ARM64_REG_X4,
+ UC_ARM64_REG_X5,
+ UC_ARM64_REG_X6,
+ UC_ARM64_REG_X7,
+ UC_ARM64_REG_X8,
+ UC_ARM64_REG_X9,
+ UC_ARM64_REG_X10,
+ UC_ARM64_REG_X11,
+ UC_ARM64_REG_X12,
+ UC_ARM64_REG_X13,
+ UC_ARM64_REG_X14,
+ UC_ARM64_REG_X15,
+ UC_ARM64_REG_X16,
+ UC_ARM64_REG_X17,
+ UC_ARM64_REG_X18,
+ UC_ARM64_REG_X19,
+ UC_ARM64_REG_X20,
+ UC_ARM64_REG_X21,
+ UC_ARM64_REG_X22,
+ UC_ARM64_REG_X23,
+ UC_ARM64_REG_X24,
+ UC_ARM64_REG_X25,
+ UC_ARM64_REG_X26,
+ UC_ARM64_REG_X27,
+ UC_ARM64_REG_X28,
+
+ UC_ARM64_REG_V0,
+ UC_ARM64_REG_V1,
+ UC_ARM64_REG_V2,
+ UC_ARM64_REG_V3,
+ UC_ARM64_REG_V4,
+ UC_ARM64_REG_V5,
+ UC_ARM64_REG_V6,
+ UC_ARM64_REG_V7,
+ UC_ARM64_REG_V8,
+ UC_ARM64_REG_V9,
+ UC_ARM64_REG_V10,
+ UC_ARM64_REG_V11,
+ UC_ARM64_REG_V12,
+ UC_ARM64_REG_V13,
+ UC_ARM64_REG_V14,
+ UC_ARM64_REG_V15,
+ UC_ARM64_REG_V16,
+ UC_ARM64_REG_V17,
+ UC_ARM64_REG_V18,
+ UC_ARM64_REG_V19,
+ UC_ARM64_REG_V20,
+ UC_ARM64_REG_V21,
+ UC_ARM64_REG_V22,
+ UC_ARM64_REG_V23,
+ UC_ARM64_REG_V24,
+ UC_ARM64_REG_V25,
+ UC_ARM64_REG_V26,
+ UC_ARM64_REG_V27,
+ UC_ARM64_REG_V28,
+ UC_ARM64_REG_V29,
+ UC_ARM64_REG_V30,
+ UC_ARM64_REG_V31,
+
+ //> pseudo registers
+ UC_ARM64_REG_PC, // program counter register
+
+ UC_ARM64_REG_CPACR_EL1,
+
+ //> thread registers
+ UC_ARM64_REG_TPIDR_EL0,
+ UC_ARM64_REG_TPIDRRO_EL0,
+ UC_ARM64_REG_TPIDR_EL1,
+
+ UC_ARM64_REG_ENDING, // <-- mark the end of the list of registers
+
+ //> alias registers
+
+ UC_ARM64_REG_IP0 = UC_ARM64_REG_X16,
+ UC_ARM64_REG_IP1 = UC_ARM64_REG_X17,
+ UC_ARM64_REG_FP = UC_ARM64_REG_X29,
+ UC_ARM64_REG_LR = UC_ARM64_REG_X30,
+} uc_arm64_reg;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/m68k.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/m68k.h
new file mode 100644
index 000000000..80e8b9205
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/m68k.h
@@ -0,0 +1,50 @@
+/* Unicorn Emulator Engine */
+/* By Nguyen Anh Quynh , 2014-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_M68K_H
+#define UNICORN_M68K_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#endif
+
+//> M68K registers
+typedef enum uc_m68k_reg {
+ UC_M68K_REG_INVALID = 0,
+
+ UC_M68K_REG_A0,
+ UC_M68K_REG_A1,
+ UC_M68K_REG_A2,
+ UC_M68K_REG_A3,
+ UC_M68K_REG_A4,
+ UC_M68K_REG_A5,
+ UC_M68K_REG_A6,
+ UC_M68K_REG_A7,
+
+ UC_M68K_REG_D0,
+ UC_M68K_REG_D1,
+ UC_M68K_REG_D2,
+ UC_M68K_REG_D3,
+ UC_M68K_REG_D4,
+ UC_M68K_REG_D5,
+ UC_M68K_REG_D6,
+ UC_M68K_REG_D7,
+
+ UC_M68K_REG_SR,
+ UC_M68K_REG_PC,
+
+ UC_M68K_REG_ENDING, // <-- mark the end of the list of registers
+} uc_m68k_reg;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/mips.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/mips.h
new file mode 100644
index 000000000..108962893
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/mips.h
@@ -0,0 +1,229 @@
+/* Unicorn Emulator Engine */
+/* By Nguyen Anh Quynh , 2015-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_MIPS_H
+#define UNICORN_MIPS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// GCC MIPS toolchain has a default macro called "mips" which breaks
+// compilation
+#undef mips
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#endif
+
+//> MIPS registers
+typedef enum UC_MIPS_REG {
+ UC_MIPS_REG_INVALID = 0,
+ //> General purpose registers
+ UC_MIPS_REG_PC,
+
+ UC_MIPS_REG_0,
+ UC_MIPS_REG_1,
+ UC_MIPS_REG_2,
+ UC_MIPS_REG_3,
+ UC_MIPS_REG_4,
+ UC_MIPS_REG_5,
+ UC_MIPS_REG_6,
+ UC_MIPS_REG_7,
+ UC_MIPS_REG_8,
+ UC_MIPS_REG_9,
+ UC_MIPS_REG_10,
+ UC_MIPS_REG_11,
+ UC_MIPS_REG_12,
+ UC_MIPS_REG_13,
+ UC_MIPS_REG_14,
+ UC_MIPS_REG_15,
+ UC_MIPS_REG_16,
+ UC_MIPS_REG_17,
+ UC_MIPS_REG_18,
+ UC_MIPS_REG_19,
+ UC_MIPS_REG_20,
+ UC_MIPS_REG_21,
+ UC_MIPS_REG_22,
+ UC_MIPS_REG_23,
+ UC_MIPS_REG_24,
+ UC_MIPS_REG_25,
+ UC_MIPS_REG_26,
+ UC_MIPS_REG_27,
+ UC_MIPS_REG_28,
+ UC_MIPS_REG_29,
+ UC_MIPS_REG_30,
+ UC_MIPS_REG_31,
+
+ //> DSP registers
+ UC_MIPS_REG_DSPCCOND,
+ UC_MIPS_REG_DSPCARRY,
+ UC_MIPS_REG_DSPEFI,
+ UC_MIPS_REG_DSPOUTFLAG,
+ UC_MIPS_REG_DSPOUTFLAG16_19,
+ UC_MIPS_REG_DSPOUTFLAG20,
+ UC_MIPS_REG_DSPOUTFLAG21,
+ UC_MIPS_REG_DSPOUTFLAG22,
+ UC_MIPS_REG_DSPOUTFLAG23,
+ UC_MIPS_REG_DSPPOS,
+ UC_MIPS_REG_DSPSCOUNT,
+
+ //> ACC registers
+ UC_MIPS_REG_AC0,
+ UC_MIPS_REG_AC1,
+ UC_MIPS_REG_AC2,
+ UC_MIPS_REG_AC3,
+
+ //> COP registers
+ UC_MIPS_REG_CC0,
+ UC_MIPS_REG_CC1,
+ UC_MIPS_REG_CC2,
+ UC_MIPS_REG_CC3,
+ UC_MIPS_REG_CC4,
+ UC_MIPS_REG_CC5,
+ UC_MIPS_REG_CC6,
+ UC_MIPS_REG_CC7,
+
+ //> FPU registers
+ UC_MIPS_REG_F0,
+ UC_MIPS_REG_F1,
+ UC_MIPS_REG_F2,
+ UC_MIPS_REG_F3,
+ UC_MIPS_REG_F4,
+ UC_MIPS_REG_F5,
+ UC_MIPS_REG_F6,
+ UC_MIPS_REG_F7,
+ UC_MIPS_REG_F8,
+ UC_MIPS_REG_F9,
+ UC_MIPS_REG_F10,
+ UC_MIPS_REG_F11,
+ UC_MIPS_REG_F12,
+ UC_MIPS_REG_F13,
+ UC_MIPS_REG_F14,
+ UC_MIPS_REG_F15,
+ UC_MIPS_REG_F16,
+ UC_MIPS_REG_F17,
+ UC_MIPS_REG_F18,
+ UC_MIPS_REG_F19,
+ UC_MIPS_REG_F20,
+ UC_MIPS_REG_F21,
+ UC_MIPS_REG_F22,
+ UC_MIPS_REG_F23,
+ UC_MIPS_REG_F24,
+ UC_MIPS_REG_F25,
+ UC_MIPS_REG_F26,
+ UC_MIPS_REG_F27,
+ UC_MIPS_REG_F28,
+ UC_MIPS_REG_F29,
+ UC_MIPS_REG_F30,
+ UC_MIPS_REG_F31,
+
+ UC_MIPS_REG_FCC0,
+ UC_MIPS_REG_FCC1,
+ UC_MIPS_REG_FCC2,
+ UC_MIPS_REG_FCC3,
+ UC_MIPS_REG_FCC4,
+ UC_MIPS_REG_FCC5,
+ UC_MIPS_REG_FCC6,
+ UC_MIPS_REG_FCC7,
+
+ //> AFPR128
+ UC_MIPS_REG_W0,
+ UC_MIPS_REG_W1,
+ UC_MIPS_REG_W2,
+ UC_MIPS_REG_W3,
+ UC_MIPS_REG_W4,
+ UC_MIPS_REG_W5,
+ UC_MIPS_REG_W6,
+ UC_MIPS_REG_W7,
+ UC_MIPS_REG_W8,
+ UC_MIPS_REG_W9,
+ UC_MIPS_REG_W10,
+ UC_MIPS_REG_W11,
+ UC_MIPS_REG_W12,
+ UC_MIPS_REG_W13,
+ UC_MIPS_REG_W14,
+ UC_MIPS_REG_W15,
+ UC_MIPS_REG_W16,
+ UC_MIPS_REG_W17,
+ UC_MIPS_REG_W18,
+ UC_MIPS_REG_W19,
+ UC_MIPS_REG_W20,
+ UC_MIPS_REG_W21,
+ UC_MIPS_REG_W22,
+ UC_MIPS_REG_W23,
+ UC_MIPS_REG_W24,
+ UC_MIPS_REG_W25,
+ UC_MIPS_REG_W26,
+ UC_MIPS_REG_W27,
+ UC_MIPS_REG_W28,
+ UC_MIPS_REG_W29,
+ UC_MIPS_REG_W30,
+ UC_MIPS_REG_W31,
+
+ UC_MIPS_REG_HI,
+ UC_MIPS_REG_LO,
+
+ UC_MIPS_REG_P0,
+ UC_MIPS_REG_P1,
+ UC_MIPS_REG_P2,
+
+ UC_MIPS_REG_MPL0,
+ UC_MIPS_REG_MPL1,
+ UC_MIPS_REG_MPL2,
+
+ UC_MIPS_REG_ENDING, // <-- mark the end of the list or registers
+
+ // alias registers
+ UC_MIPS_REG_ZERO = UC_MIPS_REG_0,
+ UC_MIPS_REG_AT = UC_MIPS_REG_1,
+ UC_MIPS_REG_V0 = UC_MIPS_REG_2,
+ UC_MIPS_REG_V1 = UC_MIPS_REG_3,
+ UC_MIPS_REG_A0 = UC_MIPS_REG_4,
+ UC_MIPS_REG_A1 = UC_MIPS_REG_5,
+ UC_MIPS_REG_A2 = UC_MIPS_REG_6,
+ UC_MIPS_REG_A3 = UC_MIPS_REG_7,
+ UC_MIPS_REG_T0 = UC_MIPS_REG_8,
+ UC_MIPS_REG_T1 = UC_MIPS_REG_9,
+ UC_MIPS_REG_T2 = UC_MIPS_REG_10,
+ UC_MIPS_REG_T3 = UC_MIPS_REG_11,
+ UC_MIPS_REG_T4 = UC_MIPS_REG_12,
+ UC_MIPS_REG_T5 = UC_MIPS_REG_13,
+ UC_MIPS_REG_T6 = UC_MIPS_REG_14,
+ UC_MIPS_REG_T7 = UC_MIPS_REG_15,
+ UC_MIPS_REG_S0 = UC_MIPS_REG_16,
+ UC_MIPS_REG_S1 = UC_MIPS_REG_17,
+ UC_MIPS_REG_S2 = UC_MIPS_REG_18,
+ UC_MIPS_REG_S3 = UC_MIPS_REG_19,
+ UC_MIPS_REG_S4 = UC_MIPS_REG_20,
+ UC_MIPS_REG_S5 = UC_MIPS_REG_21,
+ UC_MIPS_REG_S6 = UC_MIPS_REG_22,
+ UC_MIPS_REG_S7 = UC_MIPS_REG_23,
+ UC_MIPS_REG_T8 = UC_MIPS_REG_24,
+ UC_MIPS_REG_T9 = UC_MIPS_REG_25,
+ UC_MIPS_REG_K0 = UC_MIPS_REG_26,
+ UC_MIPS_REG_K1 = UC_MIPS_REG_27,
+ UC_MIPS_REG_GP = UC_MIPS_REG_28,
+ UC_MIPS_REG_SP = UC_MIPS_REG_29,
+ UC_MIPS_REG_FP = UC_MIPS_REG_30, UC_MIPS_REG_S8 = UC_MIPS_REG_30,
+ UC_MIPS_REG_RA = UC_MIPS_REG_31,
+
+ UC_MIPS_REG_HI0 = UC_MIPS_REG_AC0,
+ UC_MIPS_REG_HI1 = UC_MIPS_REG_AC1,
+ UC_MIPS_REG_HI2 = UC_MIPS_REG_AC2,
+ UC_MIPS_REG_HI3 = UC_MIPS_REG_AC3,
+
+ UC_MIPS_REG_LO0 = UC_MIPS_REG_HI0,
+ UC_MIPS_REG_LO1 = UC_MIPS_REG_HI1,
+ UC_MIPS_REG_LO2 = UC_MIPS_REG_HI2,
+ UC_MIPS_REG_LO3 = UC_MIPS_REG_HI3,
+} UC_MIPS_REG;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/platform.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/platform.h
new file mode 100644
index 000000000..fcd2c84a4
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/platform.h
@@ -0,0 +1,219 @@
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+/*
+ This file is to support header files that are missing in MSVC and
+ other non-standard compilers.
+*/
+#ifndef UNICORN_PLATFORM_H
+#define UNICORN_PLATFORM_H
+
+/*
+These are the various MSVC versions as given by _MSC_VER:
+MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
+MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
+MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
+MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
+MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
+MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
+MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
+MSVC++ 7.0 _MSC_VER == 1300
+MSVC++ 6.0 _MSC_VER == 1200
+MSVC++ 5.0 _MSC_VER == 1100
+*/
+#define MSC_VER_VS2003 1310
+#define MSC_VER_VS2005 1400
+#define MSC_VER_VS2008 1500
+#define MSC_VER_VS2010 1600
+#define MSC_VER_VS2012 1700
+#define MSC_VER_VS2013 1800
+#define MSC_VER_VS2015 1900
+
+// handle stdbool.h compatibility
+#if !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) && (defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64))
+// MSVC
+
+// stdbool.h
+#if (_MSC_VER < MSC_VER_VS2013) || defined(_KERNEL_MODE)
+// this system does not have stdbool.h
+#ifndef __cplusplus
+typedef unsigned char bool;
+#define false 0
+#define true 1
+#endif // __cplusplus
+
+#else
+// VisualStudio 2013+ -> C99 is supported
+#include
+#endif // (_MSC_VER < MSC_VER_VS2013) || defined(_KERNEL_MODE)
+
+#else
+// not MSVC -> C99 is supported
+#include
+#endif // !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) && (defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64))
+
+#if (defined(_MSC_VER) && (_MSC_VER < MSC_VER_VS2010)) || defined(_KERNEL_MODE)
+// this system does not have stdint.h
+typedef signed char int8_t;
+typedef signed short int16_t;
+typedef signed int int32_t;
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef signed long long int64_t;
+typedef unsigned long long uint64_t;
+
+#ifndef _INTPTR_T_DEFINED
+ #define _INTPTR_T_DEFINED
+ #ifdef _WIN64
+typedef long long intptr_t;
+ #else /* _WIN64 */
+typedef _W64 int intptr_t;
+ #endif /* _WIN64 */
+#endif /* _INTPTR_T_DEFINED */
+
+#ifndef _UINTPTR_T_DEFINED
+ #define _UINTPTR_T_DEFINED
+ #ifdef _WIN64
+typedef unsigned long long uintptr_t;
+ #else /* _WIN64 */
+typedef _W64 unsigned int uintptr_t;
+ #endif /* _WIN64 */
+#endif /* _UINTPTR_T_DEFINED */
+
+#define INT8_MIN (-127i8 - 1)
+#define INT16_MIN (-32767i16 - 1)
+#define INT32_MIN (-2147483647i32 - 1)
+#define INT64_MIN (-9223372036854775807i64 - 1)
+#define INT8_MAX 127i8
+#define INT16_MAX 32767i16
+#define INT32_MAX 2147483647i32
+#define INT64_MAX 9223372036854775807i64
+#define UINT8_MAX 0xffui8
+#define UINT16_MAX 0xffffui16
+#define UINT32_MAX 0xffffffffui32
+#define UINT64_MAX 0xffffffffffffffffui64
+#else // this system has stdint.h
+#include
+#endif // (defined(_MSC_VER) && (_MSC_VER < MSC_VER_VS2010)) || defined(_KERNEL_MODE)
+
+// handle inttypes.h compatibility
+#if (defined(_MSC_VER) && (_MSC_VER < MSC_VER_VS2013)) || defined(_KERNEL_MODE)
+// this system does not have inttypes.h
+
+#define __PRI_8_LENGTH_MODIFIER__ "hh"
+#define __PRI_64_LENGTH_MODIFIER__ "ll"
+
+#define PRId8 __PRI_8_LENGTH_MODIFIER__ "d"
+#define PRIi8 __PRI_8_LENGTH_MODIFIER__ "i"
+#define PRIo8 __PRI_8_LENGTH_MODIFIER__ "o"
+#define PRIu8 __PRI_8_LENGTH_MODIFIER__ "u"
+#define PRIx8 __PRI_8_LENGTH_MODIFIER__ "x"
+#define PRIX8 __PRI_8_LENGTH_MODIFIER__ "X"
+
+#define PRId16 "hd"
+#define PRIi16 "hi"
+#define PRIo16 "ho"
+#define PRIu16 "hu"
+#define PRIx16 "hx"
+#define PRIX16 "hX"
+
+#if defined(_MSC_VER) && (_MSC_VER <= MSC_VER_VS2012)
+#define PRId32 "ld"
+#define PRIi32 "li"
+#define PRIo32 "lo"
+#define PRIu32 "lu"
+#define PRIx32 "lx"
+#define PRIX32 "lX"
+#else // OSX
+#define PRId32 "d"
+#define PRIi32 "i"
+#define PRIo32 "o"
+#define PRIu32 "u"
+#define PRIx32 "x"
+#define PRIX32 "X"
+#endif // defined(_MSC_VER) && (_MSC_VER <= MSC_VER_VS2012)
+
+#if defined(_MSC_VER) && (_MSC_VER <= MSC_VER_VS2012)
+// redefine functions from inttypes.h used in cstool
+#define strtoull _strtoui64
+#endif
+
+#define PRId64 __PRI_64_LENGTH_MODIFIER__ "d"
+#define PRIi64 __PRI_64_LENGTH_MODIFIER__ "i"
+#define PRIo64 __PRI_64_LENGTH_MODIFIER__ "o"
+#define PRIu64 __PRI_64_LENGTH_MODIFIER__ "u"
+#define PRIx64 __PRI_64_LENGTH_MODIFIER__ "x"
+#define PRIX64 __PRI_64_LENGTH_MODIFIER__ "X"
+
+#else
+// this system has inttypes.h by default
+#include
+#endif // #if defined(_MSC_VER) && (_MSC_VER < MSC_VER_VS2013) || defined(_KERNEL_MODE)
+
+// sys/time.h compatibility
+#if defined(_MSC_VER)
+#include
+#include
+#include
+
+static int gettimeofday(struct timeval* t, void* timezone)
+{
+ struct _timeb timebuffer;
+ _ftime( &timebuffer );
+ t->tv_sec = (long)timebuffer.time;
+ t->tv_usec = 1000*timebuffer.millitm;
+ return 0;
+}
+#else
+#include
+#endif
+
+// unistd.h compatibility
+#if defined(_MSC_VER)
+
+static int usleep(uint32_t usec)
+{
+ HANDLE timer;
+ LARGE_INTEGER due;
+
+ timer = CreateWaitableTimer(NULL, TRUE, NULL);
+ if (!timer)
+ return -1;
+
+ due.QuadPart = (-((int64_t) usec)) * 10LL;
+ if (!SetWaitableTimer(timer, &due, 0, NULL, NULL, 0)) {
+ CloseHandle(timer);
+ return -1;
+ }
+ WaitForSingleObject(timer, INFINITE);
+ CloseHandle(timer);
+
+ return 0;
+}
+
+#else
+#include
+#endif
+
+// misc support
+#if defined(_MSC_VER)
+#ifdef _WIN64
+typedef signed __int64 ssize_t;
+#else
+typedef _W64 signed int ssize_t;
+#endif
+
+#define va_copy(d,s) ((d) = (s))
+#define strcasecmp _stricmp
+#if (_MSC_VER < MSC_VER_VS2015)
+#define snprintf _snprintf
+#endif
+#if (_MSC_VER <= MSC_VER_VS2013)
+#define strtoll _strtoi64
+#endif
+#endif
+
+
+#endif // UNICORN_PLATFORM_H
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/sparc.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/sparc.h
new file mode 100644
index 000000000..08e053867
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/sparc.h
@@ -0,0 +1,130 @@
+/* Unicorn Emulator Engine */
+/* By Nguyen Anh Quynh , 2014-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_SPARC_H
+#define UNICORN_SPARC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// GCC SPARC toolchain has a default macro called "sparc" which breaks
+// compilation
+#undef sparc
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#endif
+
+//> SPARC registers
+typedef enum uc_sparc_reg {
+ UC_SPARC_REG_INVALID = 0,
+
+ UC_SPARC_REG_F0,
+ UC_SPARC_REG_F1,
+ UC_SPARC_REG_F2,
+ UC_SPARC_REG_F3,
+ UC_SPARC_REG_F4,
+ UC_SPARC_REG_F5,
+ UC_SPARC_REG_F6,
+ UC_SPARC_REG_F7,
+ UC_SPARC_REG_F8,
+ UC_SPARC_REG_F9,
+ UC_SPARC_REG_F10,
+ UC_SPARC_REG_F11,
+ UC_SPARC_REG_F12,
+ UC_SPARC_REG_F13,
+ UC_SPARC_REG_F14,
+ UC_SPARC_REG_F15,
+ UC_SPARC_REG_F16,
+ UC_SPARC_REG_F17,
+ UC_SPARC_REG_F18,
+ UC_SPARC_REG_F19,
+ UC_SPARC_REG_F20,
+ UC_SPARC_REG_F21,
+ UC_SPARC_REG_F22,
+ UC_SPARC_REG_F23,
+ UC_SPARC_REG_F24,
+ UC_SPARC_REG_F25,
+ UC_SPARC_REG_F26,
+ UC_SPARC_REG_F27,
+ UC_SPARC_REG_F28,
+ UC_SPARC_REG_F29,
+ UC_SPARC_REG_F30,
+ UC_SPARC_REG_F31,
+ UC_SPARC_REG_F32,
+ UC_SPARC_REG_F34,
+ UC_SPARC_REG_F36,
+ UC_SPARC_REG_F38,
+ UC_SPARC_REG_F40,
+ UC_SPARC_REG_F42,
+ UC_SPARC_REG_F44,
+ UC_SPARC_REG_F46,
+ UC_SPARC_REG_F48,
+ UC_SPARC_REG_F50,
+ UC_SPARC_REG_F52,
+ UC_SPARC_REG_F54,
+ UC_SPARC_REG_F56,
+ UC_SPARC_REG_F58,
+ UC_SPARC_REG_F60,
+ UC_SPARC_REG_F62,
+ UC_SPARC_REG_FCC0, // Floating condition codes
+ UC_SPARC_REG_FCC1,
+ UC_SPARC_REG_FCC2,
+ UC_SPARC_REG_FCC3,
+ UC_SPARC_REG_G0,
+ UC_SPARC_REG_G1,
+ UC_SPARC_REG_G2,
+ UC_SPARC_REG_G3,
+ UC_SPARC_REG_G4,
+ UC_SPARC_REG_G5,
+ UC_SPARC_REG_G6,
+ UC_SPARC_REG_G7,
+ UC_SPARC_REG_I0,
+ UC_SPARC_REG_I1,
+ UC_SPARC_REG_I2,
+ UC_SPARC_REG_I3,
+ UC_SPARC_REG_I4,
+ UC_SPARC_REG_I5,
+ UC_SPARC_REG_FP,
+ UC_SPARC_REG_I7,
+ UC_SPARC_REG_ICC, // Integer condition codes
+ UC_SPARC_REG_L0,
+ UC_SPARC_REG_L1,
+ UC_SPARC_REG_L2,
+ UC_SPARC_REG_L3,
+ UC_SPARC_REG_L4,
+ UC_SPARC_REG_L5,
+ UC_SPARC_REG_L6,
+ UC_SPARC_REG_L7,
+ UC_SPARC_REG_O0,
+ UC_SPARC_REG_O1,
+ UC_SPARC_REG_O2,
+ UC_SPARC_REG_O3,
+ UC_SPARC_REG_O4,
+ UC_SPARC_REG_O5,
+ UC_SPARC_REG_SP,
+ UC_SPARC_REG_O7,
+ UC_SPARC_REG_Y,
+
+ // special register
+ UC_SPARC_REG_XCC,
+
+ // pseudo register
+ UC_SPARC_REG_PC, // program counter register
+
+ UC_SPARC_REG_ENDING, // <-- mark the end of the list of registers
+
+ // extras
+ UC_SPARC_REG_O6 = UC_SPARC_REG_SP,
+ UC_SPARC_REG_I6 = UC_SPARC_REG_FP,
+} uc_sparc_reg;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/unicorn.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/unicorn.h
new file mode 100644
index 000000000..ee307fac5
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/unicorn.h
@@ -0,0 +1,730 @@
+/* Unicorn Emulator Engine */
+/* By Nguyen Anh Quynh , 2015-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_ENGINE_H
+#define UNICORN_ENGINE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "platform.h"
+#include
+
+#if defined(UNICORN_HAS_OSXKERNEL)
+#include
+#else
+#include
+#include
+#endif
+
+struct uc_struct;
+typedef struct uc_struct uc_engine;
+
+typedef size_t uc_hook;
+
+#include "m68k.h"
+#include "x86.h"
+#include "arm.h"
+#include "arm64.h"
+#include "mips.h"
+#include "sparc.h"
+
+#ifdef __GNUC__
+#define DEFAULT_VISIBILITY __attribute__((visibility("default")))
+#else
+#define DEFAULT_VISIBILITY
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201)
+#pragma warning(disable:4100)
+#ifdef UNICORN_SHARED
+#define UNICORN_EXPORT __declspec(dllexport)
+#else // defined(UNICORN_STATIC)
+#define UNICORN_EXPORT
+#endif
+#else
+#ifdef __GNUC__
+#define UNICORN_EXPORT __attribute__((visibility("default")))
+#else
+#define UNICORN_EXPORT
+#endif
+#endif
+
+#ifdef __GNUC__
+#define UNICORN_DEPRECATED __attribute__((deprecated))
+#elif defined(_MSC_VER)
+#define UNICORN_DEPRECATED __declspec(deprecated)
+#else
+#pragma message("WARNING: You need to implement UNICORN_DEPRECATED for this compiler")
+#define UNICORN_DEPRECATED
+#endif
+
+// Unicorn API version
+#define UC_API_MAJOR 1
+#define UC_API_MINOR 0
+
+// Unicorn package version
+#define UC_VERSION_MAJOR UC_API_MAJOR
+#define UC_VERSION_MINOR UC_API_MINOR
+#define UC_VERSION_EXTRA 2
+
+
+/*
+ Macro to create combined version which can be compared to
+ result of uc_version() API.
+*/
+#define UC_MAKE_VERSION(major, minor) ((major << 8) + minor)
+
+// Scales to calculate timeout on microsecond unit
+// 1 second = 1000,000 microseconds
+#define UC_SECOND_SCALE 1000000
+// 1 milisecond = 1000 nanoseconds
+#define UC_MILISECOND_SCALE 1000
+
+// Architecture type
+typedef enum uc_arch {
+ UC_ARCH_ARM = 1, // ARM architecture (including Thumb, Thumb-2)
+ UC_ARCH_ARM64, // ARM-64, also called AArch64
+ UC_ARCH_MIPS, // Mips architecture
+ UC_ARCH_X86, // X86 architecture (including x86 & x86-64)
+ UC_ARCH_PPC, // PowerPC architecture (currently unsupported)
+ UC_ARCH_SPARC, // Sparc architecture
+ UC_ARCH_M68K, // M68K architecture
+ UC_ARCH_MAX,
+} uc_arch;
+
+// Mode type
+typedef enum uc_mode {
+ UC_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode)
+ UC_MODE_BIG_ENDIAN = 1 << 30, // big-endian mode
+ // arm / arm64
+ UC_MODE_ARM = 0, // ARM mode
+ UC_MODE_THUMB = 1 << 4, // THUMB mode (including Thumb-2)
+ UC_MODE_MCLASS = 1 << 5, // ARM's Cortex-M series (currently unsupported)
+ UC_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM (currently unsupported)
+ // mips
+ UC_MODE_MICRO = 1 << 4, // MicroMips mode (currently unsupported)
+ UC_MODE_MIPS3 = 1 << 5, // Mips III ISA (currently unsupported)
+ UC_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA (currently unsupported)
+ UC_MODE_MIPS32 = 1 << 2, // Mips32 ISA
+ UC_MODE_MIPS64 = 1 << 3, // Mips64 ISA
+ // x86 / x64
+ UC_MODE_16 = 1 << 1, // 16-bit mode
+ UC_MODE_32 = 1 << 2, // 32-bit mode
+ UC_MODE_64 = 1 << 3, // 64-bit mode
+ // ppc
+ UC_MODE_PPC32 = 1 << 2, // 32-bit mode (currently unsupported)
+ UC_MODE_PPC64 = 1 << 3, // 64-bit mode (currently unsupported)
+ UC_MODE_QPX = 1 << 4, // Quad Processing eXtensions mode (currently unsupported)
+ // sparc
+ UC_MODE_SPARC32 = 1 << 2, // 32-bit mode
+ UC_MODE_SPARC64 = 1 << 3, // 64-bit mode
+ UC_MODE_V9 = 1 << 4, // SparcV9 mode (currently unsupported)
+ // m68k
+} uc_mode;
+
+// All type of errors encountered by Unicorn API.
+// These are values returned by uc_errno()
+typedef enum uc_err {
+ UC_ERR_OK = 0, // No error: everything was fine
+ UC_ERR_NOMEM, // Out-Of-Memory error: uc_open(), uc_emulate()
+ UC_ERR_ARCH, // Unsupported architecture: uc_open()
+ UC_ERR_HANDLE, // Invalid handle
+ UC_ERR_MODE, // Invalid/unsupported mode: uc_open()
+ UC_ERR_VERSION, // Unsupported version (bindings)
+ UC_ERR_READ_UNMAPPED, // Quit emulation due to READ on unmapped memory: uc_emu_start()
+ UC_ERR_WRITE_UNMAPPED, // Quit emulation due to WRITE on unmapped memory: uc_emu_start()
+ UC_ERR_FETCH_UNMAPPED, // Quit emulation due to FETCH on unmapped memory: uc_emu_start()
+ UC_ERR_HOOK, // Invalid hook type: uc_hook_add()
+ UC_ERR_INSN_INVALID, // Quit emulation due to invalid instruction: uc_emu_start()
+ UC_ERR_MAP, // Invalid memory mapping: uc_mem_map()
+ UC_ERR_WRITE_PROT, // Quit emulation due to UC_MEM_WRITE_PROT violation: uc_emu_start()
+ UC_ERR_READ_PROT, // Quit emulation due to UC_MEM_READ_PROT violation: uc_emu_start()
+ UC_ERR_FETCH_PROT, // Quit emulation due to UC_MEM_FETCH_PROT violation: uc_emu_start()
+ UC_ERR_ARG, // Inavalid argument provided to uc_xxx function (See specific function API)
+ UC_ERR_READ_UNALIGNED, // Unaligned read
+ UC_ERR_WRITE_UNALIGNED, // Unaligned write
+ UC_ERR_FETCH_UNALIGNED, // Unaligned fetch
+ UC_ERR_HOOK_EXIST, // hook for this event already existed
+ UC_ERR_RESOURCE, // Insufficient resource: uc_emu_start()
+ UC_ERR_EXCEPTION // Unhandled CPU exception
+} uc_err;
+
+
+/*
+ Callback function for tracing code (UC_HOOK_CODE & UC_HOOK_BLOCK)
+
+ @address: address where the code is being executed
+ @size: size of machine instruction(s) being executed, or 0 when size is unknown
+ @user_data: user data passed to tracing APIs.
+*/
+typedef void (*uc_cb_hookcode_t)(uc_engine *uc, uint64_t address, uint32_t size, void *user_data);
+
+/*
+ Callback function for tracing interrupts (for uc_hook_intr())
+
+ @intno: interrupt number
+ @user_data: user data passed to tracing APIs.
+*/
+typedef void (*uc_cb_hookintr_t)(uc_engine *uc, uint32_t intno, void *user_data);
+
+/*
+ Callback function for tracing IN instruction of X86
+
+ @port: port number
+ @size: data size (1/2/4) to be read from this port
+ @user_data: user data passed to tracing APIs.
+*/
+typedef uint32_t (*uc_cb_insn_in_t)(uc_engine *uc, uint32_t port, int size, void *user_data);
+
+/*
+ Callback function for OUT instruction of X86
+
+ @port: port number
+ @size: data size (1/2/4) to be written to this port
+ @value: data value to be written to this port
+*/
+typedef void (*uc_cb_insn_out_t)(uc_engine *uc, uint32_t port, int size, uint32_t value, void *user_data);
+
+// All type of memory accesses for UC_HOOK_MEM_*
+typedef enum uc_mem_type {
+ UC_MEM_READ = 16, // Memory is read from
+ UC_MEM_WRITE, // Memory is written to
+ UC_MEM_FETCH, // Memory is fetched
+ UC_MEM_READ_UNMAPPED, // Unmapped memory is read from
+ UC_MEM_WRITE_UNMAPPED, // Unmapped memory is written to
+ UC_MEM_FETCH_UNMAPPED, // Unmapped memory is fetched
+ UC_MEM_WRITE_PROT, // Write to write protected, but mapped, memory
+ UC_MEM_READ_PROT, // Read from read protected, but mapped, memory
+ UC_MEM_FETCH_PROT, // Fetch from non-executable, but mapped, memory
+ UC_MEM_READ_AFTER, // Memory is read from (successful access)
+} uc_mem_type;
+
+// All type of hooks for uc_hook_add() API.
+typedef enum uc_hook_type {
+ // Hook all interrupt/syscall events
+ UC_HOOK_INTR = 1 << 0,
+ // Hook a particular instruction - only a very small subset of instructions supported here
+ UC_HOOK_INSN = 1 << 1,
+ // Hook a range of code
+ UC_HOOK_CODE = 1 << 2,
+ // Hook basic blocks
+ UC_HOOK_BLOCK = 1 << 3,
+ // Hook for memory read on unmapped memory
+ UC_HOOK_MEM_READ_UNMAPPED = 1 << 4,
+ // Hook for invalid memory write events
+ UC_HOOK_MEM_WRITE_UNMAPPED = 1 << 5,
+ // Hook for invalid memory fetch for execution events
+ UC_HOOK_MEM_FETCH_UNMAPPED = 1 << 6,
+ // Hook for memory read on read-protected memory
+ UC_HOOK_MEM_READ_PROT = 1 << 7,
+ // Hook for memory write on write-protected memory
+ UC_HOOK_MEM_WRITE_PROT = 1 << 8,
+ // Hook for memory fetch on non-executable memory
+ UC_HOOK_MEM_FETCH_PROT = 1 << 9,
+ // Hook memory read events.
+ UC_HOOK_MEM_READ = 1 << 10,
+ // Hook memory write events.
+ UC_HOOK_MEM_WRITE = 1 << 11,
+ // Hook memory fetch for execution events
+ UC_HOOK_MEM_FETCH = 1 << 12,
+ // Hook memory read events, but only successful access.
+ // The callback will be triggered after successful read.
+ UC_HOOK_MEM_READ_AFTER = 1 << 13,
+} uc_hook_type;
+
+// Hook type for all events of unmapped memory access
+#define UC_HOOK_MEM_UNMAPPED (UC_HOOK_MEM_READ_UNMAPPED + UC_HOOK_MEM_WRITE_UNMAPPED + UC_HOOK_MEM_FETCH_UNMAPPED)
+// Hook type for all events of illegal protected memory access
+#define UC_HOOK_MEM_PROT (UC_HOOK_MEM_READ_PROT + UC_HOOK_MEM_WRITE_PROT + UC_HOOK_MEM_FETCH_PROT)
+// Hook type for all events of illegal read memory access
+#define UC_HOOK_MEM_READ_INVALID (UC_HOOK_MEM_READ_PROT + UC_HOOK_MEM_READ_UNMAPPED)
+// Hook type for all events of illegal write memory access
+#define UC_HOOK_MEM_WRITE_INVALID (UC_HOOK_MEM_WRITE_PROT + UC_HOOK_MEM_WRITE_UNMAPPED)
+// Hook type for all events of illegal fetch memory access
+#define UC_HOOK_MEM_FETCH_INVALID (UC_HOOK_MEM_FETCH_PROT + UC_HOOK_MEM_FETCH_UNMAPPED)
+// Hook type for all events of illegal memory access
+#define UC_HOOK_MEM_INVALID (UC_HOOK_MEM_UNMAPPED + UC_HOOK_MEM_PROT)
+// Hook type for all events of valid memory access
+// NOTE: UC_HOOK_MEM_READ is triggered before UC_HOOK_MEM_READ_PROT and UC_HOOK_MEM_READ_UNMAPPED, so
+// this hook may technically trigger on some invalid reads.
+#define UC_HOOK_MEM_VALID (UC_HOOK_MEM_READ + UC_HOOK_MEM_WRITE + UC_HOOK_MEM_FETCH)
+
+/*
+ Callback function for hooking memory (READ, WRITE & FETCH)
+
+ @type: this memory is being READ, or WRITE
+ @address: address where the code is being executed
+ @size: size of data being read or written
+ @value: value of data being written to memory, or irrelevant if type = READ.
+ @user_data: user data passed to tracing APIs
+*/
+typedef void (*uc_cb_hookmem_t)(uc_engine *uc, uc_mem_type type,
+ uint64_t address, int size, int64_t value, void *user_data);
+
+/*
+ Callback function for handling invalid memory access events (UNMAPPED and
+ PROT events)
+
+ @type: this memory is being READ, or WRITE
+ @address: address where the code is being executed
+ @size: size of data being read or written
+ @value: value of data being written to memory, or irrelevant if type = READ.
+ @user_data: user data passed to tracing APIs
+
+ @return: return true to continue, or false to stop program (due to invalid memory).
+ NOTE: returning true to continue execution will only work if if the accessed
+ memory is made accessible with the correct permissions during the hook.
+
+ In the event of a UC_MEM_READ_UNMAPPED or UC_MEM_WRITE_UNMAPPED callback,
+ the memory should be uc_mem_map()-ed with the correct permissions, and the
+ instruction will then read or write to the address as it was supposed to.
+
+ In the event of a UC_MEM_FETCH_UNMAPPED callback, the memory can be mapped
+ in as executable, in which case execution will resume from the fetched address.
+ The instruction pointer may be written to in order to change where execution resumes,
+ but the fetch must succeed if execution is to resume.
+*/
+typedef bool (*uc_cb_eventmem_t)(uc_engine *uc, uc_mem_type type,
+ uint64_t address, int size, int64_t value, void *user_data);
+
+/*
+ Memory region mapped by uc_mem_map() and uc_mem_map_ptr()
+ Retrieve the list of memory regions with uc_mem_regions()
+*/
+typedef struct uc_mem_region {
+ uint64_t begin; // begin address of the region (inclusive)
+ uint64_t end; // end address of the region (inclusive)
+ uint32_t perms; // memory permissions of the region
+} uc_mem_region;
+
+// All type of queries for uc_query() API.
+typedef enum uc_query_type {
+ // Dynamically query current hardware mode.
+ UC_QUERY_MODE = 1,
+ UC_QUERY_PAGE_SIZE,
+ UC_QUERY_ARCH,
+} uc_query_type;
+
+// Opaque storage for CPU context, used with uc_context_*()
+struct uc_context;
+typedef struct uc_context uc_context;
+
+/*
+ Return combined API version & major and minor version numbers.
+
+ @major: major number of API version
+ @minor: minor number of API version
+
+ @return hexical number as (major << 8 | minor), which encodes both
+ major & minor versions.
+ NOTE: This returned value can be compared with version number made
+ with macro UC_MAKE_VERSION
+
+ For example, second API version would return 1 in @major, and 1 in @minor
+ The return value would be 0x0101
+
+ NOTE: if you only care about returned value, but not major and minor values,
+ set both @major & @minor arguments to NULL.
+*/
+UNICORN_EXPORT
+unsigned int uc_version(unsigned int *major, unsigned int *minor);
+
+
+/*
+ Determine if the given architecture is supported by this library.
+
+ @arch: architecture type (UC_ARCH_*)
+
+ @return True if this library supports the given arch.
+*/
+UNICORN_EXPORT
+bool uc_arch_supported(uc_arch arch);
+
+
+/*
+ Create new instance of unicorn engine.
+
+ @arch: architecture type (UC_ARCH_*)
+ @mode: hardware mode. This is combined of UC_MODE_*
+ @uc: pointer to uc_engine, which will be updated at return time
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_open(uc_arch arch, uc_mode mode, uc_engine **uc);
+
+/*
+ Close a Unicorn engine instance.
+ NOTE: this must be called only when there is no longer any
+ usage of @uc. This API releases some of @uc's cached memory, thus
+ any use of the Unicorn API with @uc after it has been closed may
+ crash your application. After this, @uc is invalid, and is no
+ longer usable.
+
+ @uc: pointer to a handle returned by uc_open()
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_close(uc_engine *uc);
+
+/*
+ Query internal status of engine.
+
+ @uc: handle returned by uc_open()
+ @type: query type. See uc_query_type
+
+ @result: save the internal status queried
+
+ @return: error code of uc_err enum type (UC_ERR_*, see above)
+*/
+UNICORN_EXPORT
+uc_err uc_query(uc_engine *uc, uc_query_type type, size_t *result);
+
+/*
+ Report the last error number when some API function fail.
+ Like glibc's errno, uc_errno might not retain its old value once accessed.
+
+ @uc: handle returned by uc_open()
+
+ @return: error code of uc_err enum type (UC_ERR_*, see above)
+*/
+UNICORN_EXPORT
+uc_err uc_errno(uc_engine *uc);
+
+/*
+ Return a string describing given error code.
+
+ @code: error code (see UC_ERR_* above)
+
+ @return: returns a pointer to a string that describes the error code
+ passed in the argument @code
+ */
+UNICORN_EXPORT
+const char *uc_strerror(uc_err code);
+
+/*
+ Write to register.
+
+ @uc: handle returned by uc_open()
+ @regid: register ID that is to be modified.
+ @value: pointer to the value that will set to register @regid
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_reg_write(uc_engine *uc, int regid, const void *value);
+
+/*
+ Read register value.
+
+ @uc: handle returned by uc_open()
+ @regid: register ID that is to be retrieved.
+ @value: pointer to a variable storing the register value.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_reg_read(uc_engine *uc, int regid, void *value);
+
+/*
+ Write multiple register values.
+
+ @uc: handle returned by uc_open()
+ @rges: array of register IDs to store
+ @value: pointer to array of register values
+ @count: length of both *regs and *vals
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_reg_write_batch(uc_engine *uc, int *regs, void *const *vals, int count);
+
+/*
+ Read multiple register values.
+
+ @uc: handle returned by uc_open()
+ @rges: array of register IDs to retrieve
+ @value: pointer to array of values to hold registers
+ @count: length of both *regs and *vals
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_reg_read_batch(uc_engine *uc, int *regs, void **vals, int count);
+
+/*
+ Write to a range of bytes in memory.
+
+ @uc: handle returned by uc_open()
+ @address: starting memory address of bytes to set.
+ @bytes: pointer to a variable containing data to be written to memory.
+ @size: size of memory to write to.
+
+ NOTE: @bytes must be big enough to contain @size bytes.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_write(uc_engine *uc, uint64_t address, const void *bytes, size_t size);
+
+/*
+ Read a range of bytes in memory.
+
+ @uc: handle returned by uc_open()
+ @address: starting memory address of bytes to get.
+ @bytes: pointer to a variable containing data copied from memory.
+ @size: size of memory to read.
+
+ NOTE: @bytes must be big enough to contain @size bytes.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_read(uc_engine *uc, uint64_t address, void *bytes, size_t size);
+
+/*
+ Emulate machine code in a specific duration of time.
+
+ @uc: handle returned by uc_open()
+ @begin: address where emulation starts
+ @until: address where emulation stops (i.e when this address is hit)
+ @timeout: duration to emulate the code (in microseconds). When this value is 0,
+ we will emulate the code in infinite time, until the code is finished.
+ @count: the number of instructions to be emulated. When this value is 0,
+ we will emulate all the code available, until the code is finished.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_emu_start(uc_engine *uc, uint64_t begin, uint64_t until, uint64_t timeout, size_t count);
+
+/*
+ Stop emulation (which was started by uc_emu_start() API.
+ This is typically called from callback functions registered via tracing APIs.
+
+ @uc: handle returned by uc_open()
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_emu_stop(uc_engine *uc);
+
+/*
+ Register callback for a hook event.
+ The callback will be run when the hook event is hit.
+
+ @uc: handle returned by uc_open()
+ @hh: hook handle returned from this registration. To be used in uc_hook_del() API
+ @type: hook type
+ @callback: callback to be run when instruction is hit
+ @user_data: user-defined data. This will be passed to callback function in its
+ last argument @user_data
+ @begin: start address of the area where the callback is effect (inclusive)
+ @end: end address of the area where the callback is effect (inclusive)
+ NOTE 1: the callback is called only if related address is in range [@begin, @end]
+ NOTE 2: if @begin > @end, callback is called whenever this hook type is triggered
+ @...: variable arguments (depending on @type)
+ NOTE: if @type = UC_HOOK_INSN, this is the instruction ID (ex: UC_X86_INS_OUT)
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_hook_add(uc_engine *uc, uc_hook *hh, int type, void *callback,
+ void *user_data, uint64_t begin, uint64_t end, ...);
+
+/*
+ Unregister (remove) a hook callback.
+ This API removes the hook callback registered by uc_hook_add().
+ NOTE: this should be called only when you no longer want to trace.
+ After this, @hh is invalid, and nolonger usable.
+
+ @uc: handle returned by uc_open()
+ @hh: handle returned by uc_hook_add()
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_hook_del(uc_engine *uc, uc_hook hh);
+
+typedef enum uc_prot {
+ UC_PROT_NONE = 0,
+ UC_PROT_READ = 1,
+ UC_PROT_WRITE = 2,
+ UC_PROT_EXEC = 4,
+ UC_PROT_ALL = 7,
+} uc_prot;
+
+/*
+ Map memory in for emulation.
+ This API adds a memory region that can be used by emulation.
+
+ @uc: handle returned by uc_open()
+ @address: starting address of the new memory region to be mapped in.
+ This address must be aligned to 4KB, or this will return with UC_ERR_ARG error.
+ @size: size of the new memory region to be mapped in.
+ This size must be multiple of 4KB, or this will return with UC_ERR_ARG error.
+ @perms: Permissions for the newly mapped region.
+ This must be some combination of UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC,
+ or this will return with UC_ERR_ARG error.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_map(uc_engine *uc, uint64_t address, size_t size, uint32_t perms);
+
+/*
+ Map existing host memory in for emulation.
+ This API adds a memory region that can be used by emulation.
+
+ @uc: handle returned by uc_open()
+ @address: starting address of the new memory region to be mapped in.
+ This address must be aligned to 4KB, or this will return with UC_ERR_ARG error.
+ @size: size of the new memory region to be mapped in.
+ This size must be multiple of 4KB, or this will return with UC_ERR_ARG error.
+ @perms: Permissions for the newly mapped region.
+ This must be some combination of UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC,
+ or this will return with UC_ERR_ARG error.
+ @ptr: pointer to host memory backing the newly mapped memory. This host memory is
+ expected to be an equal or larger size than provided, and be mapped with at
+ least PROT_READ | PROT_WRITE. If it is not, the resulting behavior is undefined.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_map_ptr(uc_engine *uc, uint64_t address, size_t size, uint32_t perms, void *ptr);
+
+/*
+ Unmap a region of emulation memory.
+ This API deletes a memory mapping from the emulation memory space.
+
+ @uc: handle returned by uc_open()
+ @address: starting address of the memory region to be unmapped.
+ This address must be aligned to 4KB, or this will return with UC_ERR_ARG error.
+ @size: size of the memory region to be modified.
+ This size must be multiple of 4KB, or this will return with UC_ERR_ARG error.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_unmap(uc_engine *uc, uint64_t address, size_t size);
+
+/*
+ Set memory permissions for emulation memory.
+ This API changes permissions on an existing memory region.
+
+ @uc: handle returned by uc_open()
+ @address: starting address of the memory region to be modified.
+ This address must be aligned to 4KB, or this will return with UC_ERR_ARG error.
+ @size: size of the memory region to be modified.
+ This size must be multiple of 4KB, or this will return with UC_ERR_ARG error.
+ @perms: New permissions for the mapped region.
+ This must be some combination of UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC,
+ or this will return with UC_ERR_ARG error.
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_protect(uc_engine *uc, uint64_t address, size_t size, uint32_t perms);
+
+/*
+ Retrieve all memory regions mapped by uc_mem_map() and uc_mem_map_ptr()
+ This API allocates memory for @regions, and user must free this memory later
+ by free() to avoid leaking memory.
+ NOTE: memory regions may be splitted by uc_mem_unmap()
+
+ @uc: handle returned by uc_open()
+ @regions: pointer to an array of uc_mem_region struct. This is allocated by
+ Unicorn, and must be freed by user later with uc_free()
+ @count: pointer to number of struct uc_mem_region contained in @regions
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_mem_regions(uc_engine *uc, uc_mem_region **regions, uint32_t *count);
+
+/*
+ Allocate a region that can be used with uc_context_{save,restore} to perform
+ quick save/rollback of the CPU context, which includes registers and some
+ internal metadata. Contexts may not be shared across engine instances with
+ differing arches or modes.
+
+ @uc: handle returned by uc_open()
+ @context: pointer to a uc_engine*. This will be updated with the pointer to
+ the new context on successful return of this function.
+ Later, this allocated memory must be freed with uc_free().
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_context_alloc(uc_engine *uc, uc_context **context);
+
+/*
+ Free the memory allocated by uc_context_alloc & uc_mem_regions.
+
+ @mem: memory allocated by uc_context_alloc (returned in *context), or
+ by uc_mem_regions (returned in *regions)
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_free(void *mem);
+
+/*
+ Save a copy of the internal CPU context.
+ This API should be used to efficiently make or update a saved copy of the
+ internal CPU state.
+
+ @uc: handle returned by uc_open()
+ @context: handle returned by uc_context_alloc()
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_context_save(uc_engine *uc, uc_context *context);
+
+/*
+ Restore the current CPU context from a saved copy.
+ This API should be used to roll the CPU context back to a previous
+ state saved by uc_context_save().
+
+ @uc: handle returned by uc_open()
+ @buffer: handle returned by uc_context_alloc that has been used with uc_context_save
+
+ @return UC_ERR_OK on success, or other value on failure (refer to uc_err enum
+ for detailed error).
+*/
+UNICORN_EXPORT
+uc_err uc_context_restore(uc_engine *uc, uc_context *context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/x86.h b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/x86.h
new file mode 100644
index 000000000..235dac6a2
--- /dev/null
+++ b/app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/x86.h
@@ -0,0 +1,1444 @@
+/* Unicorn Emulator Engine */
+/* By Nguyen Anh Quynh , 2015-2017 */
+/* This file is released under LGPL2.
+ See COPYING.LGPL2 in root directory for more details
+*/
+
+#ifndef UNICORN_X86_H
+#define UNICORN_X86_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "platform.h"
+
+// Memory-Management Register for instructions IDTR, GDTR, LDTR, TR.
+// Borrow from SegmentCache in qemu/target-i386/cpu.h
+typedef struct uc_x86_mmr {
+ uint16_t selector; /* not used by GDTR and IDTR */
+ uint64_t base; /* handle 32 or 64 bit CPUs */
+ uint32_t limit;
+ uint32_t flags; /* not used by GDTR and IDTR */
+} uc_x86_mmr;
+
+// Model-Specific Register structure, use this with UC_X86_REG_MSR (as the register ID) in
+// call to uc_reg_write/uc_reg_read() to manipulate MSRs.
+typedef struct uc_x86_msr {
+ uint32_t rid; // MSR id
+ uint64_t value; // MSR value
+} uc_x86_msr;
+
+// Callback function for tracing SYSCALL/SYSENTER (for uc_hook_intr())
+// @user_data: user data passed to tracing APIs.
+typedef void (*uc_cb_insn_syscall_t)(struct uc_struct *uc, void *user_data);
+
+//> X86 registers
+typedef enum uc_x86_reg {
+ UC_X86_REG_INVALID = 0,
+ UC_X86_REG_AH, UC_X86_REG_AL, UC_X86_REG_AX, UC_X86_REG_BH, UC_X86_REG_BL,
+ UC_X86_REG_BP, UC_X86_REG_BPL, UC_X86_REG_BX, UC_X86_REG_CH, UC_X86_REG_CL,
+ UC_X86_REG_CS, UC_X86_REG_CX, UC_X86_REG_DH, UC_X86_REG_DI, UC_X86_REG_DIL,
+ UC_X86_REG_DL, UC_X86_REG_DS, UC_X86_REG_DX, UC_X86_REG_EAX, UC_X86_REG_EBP,
+ UC_X86_REG_EBX, UC_X86_REG_ECX, UC_X86_REG_EDI, UC_X86_REG_EDX, UC_X86_REG_EFLAGS,
+ UC_X86_REG_EIP, UC_X86_REG_EIZ, UC_X86_REG_ES, UC_X86_REG_ESI, UC_X86_REG_ESP,
+ UC_X86_REG_FPSW, UC_X86_REG_FS, UC_X86_REG_GS, UC_X86_REG_IP, UC_X86_REG_RAX,
+ UC_X86_REG_RBP, UC_X86_REG_RBX, UC_X86_REG_RCX, UC_X86_REG_RDI, UC_X86_REG_RDX,
+ UC_X86_REG_RIP, UC_X86_REG_RIZ, UC_X86_REG_RSI, UC_X86_REG_RSP, UC_X86_REG_SI,
+ UC_X86_REG_SIL, UC_X86_REG_SP, UC_X86_REG_SPL, UC_X86_REG_SS, UC_X86_REG_CR0,
+ UC_X86_REG_CR1, UC_X86_REG_CR2, UC_X86_REG_CR3, UC_X86_REG_CR4, UC_X86_REG_CR5,
+ UC_X86_REG_CR6, UC_X86_REG_CR7, UC_X86_REG_CR8, UC_X86_REG_CR9, UC_X86_REG_CR10,
+ UC_X86_REG_CR11, UC_X86_REG_CR12, UC_X86_REG_CR13, UC_X86_REG_CR14, UC_X86_REG_CR15,
+ UC_X86_REG_DR0, UC_X86_REG_DR1, UC_X86_REG_DR2, UC_X86_REG_DR3, UC_X86_REG_DR4,
+ UC_X86_REG_DR5, UC_X86_REG_DR6, UC_X86_REG_DR7, UC_X86_REG_DR8, UC_X86_REG_DR9,
+ UC_X86_REG_DR10, UC_X86_REG_DR11, UC_X86_REG_DR12, UC_X86_REG_DR13, UC_X86_REG_DR14,
+ UC_X86_REG_DR15, UC_X86_REG_FP0, UC_X86_REG_FP1, UC_X86_REG_FP2, UC_X86_REG_FP3,
+ UC_X86_REG_FP4, UC_X86_REG_FP5, UC_X86_REG_FP6, UC_X86_REG_FP7,
+ UC_X86_REG_K0, UC_X86_REG_K1, UC_X86_REG_K2, UC_X86_REG_K3, UC_X86_REG_K4,
+ UC_X86_REG_K5, UC_X86_REG_K6, UC_X86_REG_K7, UC_X86_REG_MM0, UC_X86_REG_MM1,
+ UC_X86_REG_MM2, UC_X86_REG_MM3, UC_X86_REG_MM4, UC_X86_REG_MM5, UC_X86_REG_MM6,
+ UC_X86_REG_MM7, UC_X86_REG_R8, UC_X86_REG_R9, UC_X86_REG_R10, UC_X86_REG_R11,
+ UC_X86_REG_R12, UC_X86_REG_R13, UC_X86_REG_R14, UC_X86_REG_R15,
+ UC_X86_REG_ST0, UC_X86_REG_ST1, UC_X86_REG_ST2, UC_X86_REG_ST3,
+ UC_X86_REG_ST4, UC_X86_REG_ST5, UC_X86_REG_ST6, UC_X86_REG_ST7,
+ UC_X86_REG_XMM0, UC_X86_REG_XMM1, UC_X86_REG_XMM2, UC_X86_REG_XMM3, UC_X86_REG_XMM4,
+ UC_X86_REG_XMM5, UC_X86_REG_XMM6, UC_X86_REG_XMM7, UC_X86_REG_XMM8, UC_X86_REG_XMM9,
+ UC_X86_REG_XMM10, UC_X86_REG_XMM11, UC_X86_REG_XMM12, UC_X86_REG_XMM13, UC_X86_REG_XMM14,
+ UC_X86_REG_XMM15, UC_X86_REG_XMM16, UC_X86_REG_XMM17, UC_X86_REG_XMM18, UC_X86_REG_XMM19,
+ UC_X86_REG_XMM20, UC_X86_REG_XMM21, UC_X86_REG_XMM22, UC_X86_REG_XMM23, UC_X86_REG_XMM24,
+ UC_X86_REG_XMM25, UC_X86_REG_XMM26, UC_X86_REG_XMM27, UC_X86_REG_XMM28, UC_X86_REG_XMM29,
+ UC_X86_REG_XMM30, UC_X86_REG_XMM31, UC_X86_REG_YMM0, UC_X86_REG_YMM1, UC_X86_REG_YMM2,
+ UC_X86_REG_YMM3, UC_X86_REG_YMM4, UC_X86_REG_YMM5, UC_X86_REG_YMM6, UC_X86_REG_YMM7,
+ UC_X86_REG_YMM8, UC_X86_REG_YMM9, UC_X86_REG_YMM10, UC_X86_REG_YMM11, UC_X86_REG_YMM12,
+ UC_X86_REG_YMM13, UC_X86_REG_YMM14, UC_X86_REG_YMM15, UC_X86_REG_YMM16, UC_X86_REG_YMM17,
+ UC_X86_REG_YMM18, UC_X86_REG_YMM19, UC_X86_REG_YMM20, UC_X86_REG_YMM21, UC_X86_REG_YMM22,
+ UC_X86_REG_YMM23, UC_X86_REG_YMM24, UC_X86_REG_YMM25, UC_X86_REG_YMM26, UC_X86_REG_YMM27,
+ UC_X86_REG_YMM28, UC_X86_REG_YMM29, UC_X86_REG_YMM30, UC_X86_REG_YMM31, UC_X86_REG_ZMM0,
+ UC_X86_REG_ZMM1, UC_X86_REG_ZMM2, UC_X86_REG_ZMM3, UC_X86_REG_ZMM4, UC_X86_REG_ZMM5,
+ UC_X86_REG_ZMM6, UC_X86_REG_ZMM7, UC_X86_REG_ZMM8, UC_X86_REG_ZMM9, UC_X86_REG_ZMM10,
+ UC_X86_REG_ZMM11, UC_X86_REG_ZMM12, UC_X86_REG_ZMM13, UC_X86_REG_ZMM14, UC_X86_REG_ZMM15,
+ UC_X86_REG_ZMM16, UC_X86_REG_ZMM17, UC_X86_REG_ZMM18, UC_X86_REG_ZMM19, UC_X86_REG_ZMM20,
+ UC_X86_REG_ZMM21, UC_X86_REG_ZMM22, UC_X86_REG_ZMM23, UC_X86_REG_ZMM24, UC_X86_REG_ZMM25,
+ UC_X86_REG_ZMM26, UC_X86_REG_ZMM27, UC_X86_REG_ZMM28, UC_X86_REG_ZMM29, UC_X86_REG_ZMM30,
+ UC_X86_REG_ZMM31, UC_X86_REG_R8B, UC_X86_REG_R9B, UC_X86_REG_R10B, UC_X86_REG_R11B,
+ UC_X86_REG_R12B, UC_X86_REG_R13B, UC_X86_REG_R14B, UC_X86_REG_R15B, UC_X86_REG_R8D,
+ UC_X86_REG_R9D, UC_X86_REG_R10D, UC_X86_REG_R11D, UC_X86_REG_R12D, UC_X86_REG_R13D,
+ UC_X86_REG_R14D, UC_X86_REG_R15D, UC_X86_REG_R8W, UC_X86_REG_R9W, UC_X86_REG_R10W,
+ UC_X86_REG_R11W, UC_X86_REG_R12W, UC_X86_REG_R13W, UC_X86_REG_R14W, UC_X86_REG_R15W,
+ UC_X86_REG_IDTR, UC_X86_REG_GDTR, UC_X86_REG_LDTR, UC_X86_REG_TR, UC_X86_REG_FPCW,
+ UC_X86_REG_FPTAG,
+ UC_X86_REG_MSR, // Model-Specific Register
+ UC_X86_REG_MXCSR,
+ UC_X86_REG_ENDING // <-- mark the end of the list of registers
+} uc_x86_reg;
+
+//> X86 instructions
+typedef enum uc_x86_insn {
+ UC_X86_INS_INVALID = 0,
+
+ UC_X86_INS_AAA,
+ UC_X86_INS_AAD,
+ UC_X86_INS_AAM,
+ UC_X86_INS_AAS,
+ UC_X86_INS_FABS,
+ UC_X86_INS_ADC,
+ UC_X86_INS_ADCX,
+ UC_X86_INS_ADD,
+ UC_X86_INS_ADDPD,
+ UC_X86_INS_ADDPS,
+ UC_X86_INS_ADDSD,
+ UC_X86_INS_ADDSS,
+ UC_X86_INS_ADDSUBPD,
+ UC_X86_INS_ADDSUBPS,
+ UC_X86_INS_FADD,
+ UC_X86_INS_FIADD,
+ UC_X86_INS_FADDP,
+ UC_X86_INS_ADOX,
+ UC_X86_INS_AESDECLAST,
+ UC_X86_INS_AESDEC,
+ UC_X86_INS_AESENCLAST,
+ UC_X86_INS_AESENC,
+ UC_X86_INS_AESIMC,
+ UC_X86_INS_AESKEYGENASSIST,
+ UC_X86_INS_AND,
+ UC_X86_INS_ANDN,
+ UC_X86_INS_ANDNPD,
+ UC_X86_INS_ANDNPS,
+ UC_X86_INS_ANDPD,
+ UC_X86_INS_ANDPS,
+ UC_X86_INS_ARPL,
+ UC_X86_INS_BEXTR,
+ UC_X86_INS_BLCFILL,
+ UC_X86_INS_BLCI,
+ UC_X86_INS_BLCIC,
+ UC_X86_INS_BLCMSK,
+ UC_X86_INS_BLCS,
+ UC_X86_INS_BLENDPD,
+ UC_X86_INS_BLENDPS,
+ UC_X86_INS_BLENDVPD,
+ UC_X86_INS_BLENDVPS,
+ UC_X86_INS_BLSFILL,
+ UC_X86_INS_BLSI,
+ UC_X86_INS_BLSIC,
+ UC_X86_INS_BLSMSK,
+ UC_X86_INS_BLSR,
+ UC_X86_INS_BOUND,
+ UC_X86_INS_BSF,
+ UC_X86_INS_BSR,
+ UC_X86_INS_BSWAP,
+ UC_X86_INS_BT,
+ UC_X86_INS_BTC,
+ UC_X86_INS_BTR,
+ UC_X86_INS_BTS,
+ UC_X86_INS_BZHI,
+ UC_X86_INS_CALL,
+ UC_X86_INS_CBW,
+ UC_X86_INS_CDQ,
+ UC_X86_INS_CDQE,
+ UC_X86_INS_FCHS,
+ UC_X86_INS_CLAC,
+ UC_X86_INS_CLC,
+ UC_X86_INS_CLD,
+ UC_X86_INS_CLFLUSH,
+ UC_X86_INS_CLFLUSHOPT,
+ UC_X86_INS_CLGI,
+ UC_X86_INS_CLI,
+ UC_X86_INS_CLTS,
+ UC_X86_INS_CLWB,
+ UC_X86_INS_CMC,
+ UC_X86_INS_CMOVA,
+ UC_X86_INS_CMOVAE,
+ UC_X86_INS_CMOVB,
+ UC_X86_INS_CMOVBE,
+ UC_X86_INS_FCMOVBE,
+ UC_X86_INS_FCMOVB,
+ UC_X86_INS_CMOVE,
+ UC_X86_INS_FCMOVE,
+ UC_X86_INS_CMOVG,
+ UC_X86_INS_CMOVGE,
+ UC_X86_INS_CMOVL,
+ UC_X86_INS_CMOVLE,
+ UC_X86_INS_FCMOVNBE,
+ UC_X86_INS_FCMOVNB,
+ UC_X86_INS_CMOVNE,
+ UC_X86_INS_FCMOVNE,
+ UC_X86_INS_CMOVNO,
+ UC_X86_INS_CMOVNP,
+ UC_X86_INS_FCMOVNU,
+ UC_X86_INS_CMOVNS,
+ UC_X86_INS_CMOVO,
+ UC_X86_INS_CMOVP,
+ UC_X86_INS_FCMOVU,
+ UC_X86_INS_CMOVS,
+ UC_X86_INS_CMP,
+ UC_X86_INS_CMPPD,
+ UC_X86_INS_CMPPS,
+ UC_X86_INS_CMPSB,
+ UC_X86_INS_CMPSD,
+ UC_X86_INS_CMPSQ,
+ UC_X86_INS_CMPSS,
+ UC_X86_INS_CMPSW,
+ UC_X86_INS_CMPXCHG16B,
+ UC_X86_INS_CMPXCHG,
+ UC_X86_INS_CMPXCHG8B,
+ UC_X86_INS_COMISD,
+ UC_X86_INS_COMISS,
+ UC_X86_INS_FCOMP,
+ UC_X86_INS_FCOMPI,
+ UC_X86_INS_FCOMI,
+ UC_X86_INS_FCOM,
+ UC_X86_INS_FCOS,
+ UC_X86_INS_CPUID,
+ UC_X86_INS_CQO,
+ UC_X86_INS_CRC32,
+ UC_X86_INS_CVTDQ2PD,
+ UC_X86_INS_CVTDQ2PS,
+ UC_X86_INS_CVTPD2DQ,
+ UC_X86_INS_CVTPD2PS,
+ UC_X86_INS_CVTPS2DQ,
+ UC_X86_INS_CVTPS2PD,
+ UC_X86_INS_CVTSD2SI,
+ UC_X86_INS_CVTSD2SS,
+ UC_X86_INS_CVTSI2SD,
+ UC_X86_INS_CVTSI2SS,
+ UC_X86_INS_CVTSS2SD,
+ UC_X86_INS_CVTSS2SI,
+ UC_X86_INS_CVTTPD2DQ,
+ UC_X86_INS_CVTTPS2DQ,
+ UC_X86_INS_CVTTSD2SI,
+ UC_X86_INS_CVTTSS2SI,
+ UC_X86_INS_CWD,
+ UC_X86_INS_CWDE,
+ UC_X86_INS_DAA,
+ UC_X86_INS_DAS,
+ UC_X86_INS_DATA16,
+ UC_X86_INS_DEC,
+ UC_X86_INS_DIV,
+ UC_X86_INS_DIVPD,
+ UC_X86_INS_DIVPS,
+ UC_X86_INS_FDIVR,
+ UC_X86_INS_FIDIVR,
+ UC_X86_INS_FDIVRP,
+ UC_X86_INS_DIVSD,
+ UC_X86_INS_DIVSS,
+ UC_X86_INS_FDIV,
+ UC_X86_INS_FIDIV,
+ UC_X86_INS_FDIVP,
+ UC_X86_INS_DPPD,
+ UC_X86_INS_DPPS,
+ UC_X86_INS_RET,
+ UC_X86_INS_ENCLS,
+ UC_X86_INS_ENCLU,
+ UC_X86_INS_ENTER,
+ UC_X86_INS_EXTRACTPS,
+ UC_X86_INS_EXTRQ,
+ UC_X86_INS_F2XM1,
+ UC_X86_INS_LCALL,
+ UC_X86_INS_LJMP,
+ UC_X86_INS_FBLD,
+ UC_X86_INS_FBSTP,
+ UC_X86_INS_FCOMPP,
+ UC_X86_INS_FDECSTP,
+ UC_X86_INS_FEMMS,
+ UC_X86_INS_FFREE,
+ UC_X86_INS_FICOM,
+ UC_X86_INS_FICOMP,
+ UC_X86_INS_FINCSTP,
+ UC_X86_INS_FLDCW,
+ UC_X86_INS_FLDENV,
+ UC_X86_INS_FLDL2E,
+ UC_X86_INS_FLDL2T,
+ UC_X86_INS_FLDLG2,
+ UC_X86_INS_FLDLN2,
+ UC_X86_INS_FLDPI,
+ UC_X86_INS_FNCLEX,
+ UC_X86_INS_FNINIT,
+ UC_X86_INS_FNOP,
+ UC_X86_INS_FNSTCW,
+ UC_X86_INS_FNSTSW,
+ UC_X86_INS_FPATAN,
+ UC_X86_INS_FPREM,
+ UC_X86_INS_FPREM1,
+ UC_X86_INS_FPTAN,
+ UC_X86_INS_FFREEP,
+ UC_X86_INS_FRNDINT,
+ UC_X86_INS_FRSTOR,
+ UC_X86_INS_FNSAVE,
+ UC_X86_INS_FSCALE,
+ UC_X86_INS_FSETPM,
+ UC_X86_INS_FSINCOS,
+ UC_X86_INS_FNSTENV,
+ UC_X86_INS_FXAM,
+ UC_X86_INS_FXRSTOR,
+ UC_X86_INS_FXRSTOR64,
+ UC_X86_INS_FXSAVE,
+ UC_X86_INS_FXSAVE64,
+ UC_X86_INS_FXTRACT,
+ UC_X86_INS_FYL2X,
+ UC_X86_INS_FYL2XP1,
+ UC_X86_INS_MOVAPD,
+ UC_X86_INS_MOVAPS,
+ UC_X86_INS_ORPD,
+ UC_X86_INS_ORPS,
+ UC_X86_INS_VMOVAPD,
+ UC_X86_INS_VMOVAPS,
+ UC_X86_INS_XORPD,
+ UC_X86_INS_XORPS,
+ UC_X86_INS_GETSEC,
+ UC_X86_INS_HADDPD,
+ UC_X86_INS_HADDPS,
+ UC_X86_INS_HLT,
+ UC_X86_INS_HSUBPD,
+ UC_X86_INS_HSUBPS,
+ UC_X86_INS_IDIV,
+ UC_X86_INS_FILD,
+ UC_X86_INS_IMUL,
+ UC_X86_INS_IN,
+ UC_X86_INS_INC,
+ UC_X86_INS_INSB,
+ UC_X86_INS_INSERTPS,
+ UC_X86_INS_INSERTQ,
+ UC_X86_INS_INSD,
+ UC_X86_INS_INSW,
+ UC_X86_INS_INT,
+ UC_X86_INS_INT1,
+ UC_X86_INS_INT3,
+ UC_X86_INS_INTO,
+ UC_X86_INS_INVD,
+ UC_X86_INS_INVEPT,
+ UC_X86_INS_INVLPG,
+ UC_X86_INS_INVLPGA,
+ UC_X86_INS_INVPCID,
+ UC_X86_INS_INVVPID,
+ UC_X86_INS_IRET,
+ UC_X86_INS_IRETD,
+ UC_X86_INS_IRETQ,
+ UC_X86_INS_FISTTP,
+ UC_X86_INS_FIST,
+ UC_X86_INS_FISTP,
+ UC_X86_INS_UCOMISD,
+ UC_X86_INS_UCOMISS,
+ UC_X86_INS_VCOMISD,
+ UC_X86_INS_VCOMISS,
+ UC_X86_INS_VCVTSD2SS,
+ UC_X86_INS_VCVTSI2SD,
+ UC_X86_INS_VCVTSI2SS,
+ UC_X86_INS_VCVTSS2SD,
+ UC_X86_INS_VCVTTSD2SI,
+ UC_X86_INS_VCVTTSD2USI,
+ UC_X86_INS_VCVTTSS2SI,
+ UC_X86_INS_VCVTTSS2USI,
+ UC_X86_INS_VCVTUSI2SD,
+ UC_X86_INS_VCVTUSI2SS,
+ UC_X86_INS_VUCOMISD,
+ UC_X86_INS_VUCOMISS,
+ UC_X86_INS_JAE,
+ UC_X86_INS_JA,
+ UC_X86_INS_JBE,
+ UC_X86_INS_JB,
+ UC_X86_INS_JCXZ,
+ UC_X86_INS_JECXZ,
+ UC_X86_INS_JE,
+ UC_X86_INS_JGE,
+ UC_X86_INS_JG,
+ UC_X86_INS_JLE,
+ UC_X86_INS_JL,
+ UC_X86_INS_JMP,
+ UC_X86_INS_JNE,
+ UC_X86_INS_JNO,
+ UC_X86_INS_JNP,
+ UC_X86_INS_JNS,
+ UC_X86_INS_JO,
+ UC_X86_INS_JP,
+ UC_X86_INS_JRCXZ,
+ UC_X86_INS_JS,
+ UC_X86_INS_KANDB,
+ UC_X86_INS_KANDD,
+ UC_X86_INS_KANDNB,
+ UC_X86_INS_KANDND,
+ UC_X86_INS_KANDNQ,
+ UC_X86_INS_KANDNW,
+ UC_X86_INS_KANDQ,
+ UC_X86_INS_KANDW,
+ UC_X86_INS_KMOVB,
+ UC_X86_INS_KMOVD,
+ UC_X86_INS_KMOVQ,
+ UC_X86_INS_KMOVW,
+ UC_X86_INS_KNOTB,
+ UC_X86_INS_KNOTD,
+ UC_X86_INS_KNOTQ,
+ UC_X86_INS_KNOTW,
+ UC_X86_INS_KORB,
+ UC_X86_INS_KORD,
+ UC_X86_INS_KORQ,
+ UC_X86_INS_KORTESTB,
+ UC_X86_INS_KORTESTD,
+ UC_X86_INS_KORTESTQ,
+ UC_X86_INS_KORTESTW,
+ UC_X86_INS_KORW,
+ UC_X86_INS_KSHIFTLB,
+ UC_X86_INS_KSHIFTLD,
+ UC_X86_INS_KSHIFTLQ,
+ UC_X86_INS_KSHIFTLW,
+ UC_X86_INS_KSHIFTRB,
+ UC_X86_INS_KSHIFTRD,
+ UC_X86_INS_KSHIFTRQ,
+ UC_X86_INS_KSHIFTRW,
+ UC_X86_INS_KUNPCKBW,
+ UC_X86_INS_KXNORB,
+ UC_X86_INS_KXNORD,
+ UC_X86_INS_KXNORQ,
+ UC_X86_INS_KXNORW,
+ UC_X86_INS_KXORB,
+ UC_X86_INS_KXORD,
+ UC_X86_INS_KXORQ,
+ UC_X86_INS_KXORW,
+ UC_X86_INS_LAHF,
+ UC_X86_INS_LAR,
+ UC_X86_INS_LDDQU,
+ UC_X86_INS_LDMXCSR,
+ UC_X86_INS_LDS,
+ UC_X86_INS_FLDZ,
+ UC_X86_INS_FLD1,
+ UC_X86_INS_FLD,
+ UC_X86_INS_LEA,
+ UC_X86_INS_LEAVE,
+ UC_X86_INS_LES,
+ UC_X86_INS_LFENCE,
+ UC_X86_INS_LFS,
+ UC_X86_INS_LGDT,
+ UC_X86_INS_LGS,
+ UC_X86_INS_LIDT,
+ UC_X86_INS_LLDT,
+ UC_X86_INS_LMSW,
+ UC_X86_INS_OR,
+ UC_X86_INS_SUB,
+ UC_X86_INS_XOR,
+ UC_X86_INS_LODSB,
+ UC_X86_INS_LODSD,
+ UC_X86_INS_LODSQ,
+ UC_X86_INS_LODSW,
+ UC_X86_INS_LOOP,
+ UC_X86_INS_LOOPE,
+ UC_X86_INS_LOOPNE,
+ UC_X86_INS_RETF,
+ UC_X86_INS_RETFQ,
+ UC_X86_INS_LSL,
+ UC_X86_INS_LSS,
+ UC_X86_INS_LTR,
+ UC_X86_INS_XADD,
+ UC_X86_INS_LZCNT,
+ UC_X86_INS_MASKMOVDQU,
+ UC_X86_INS_MAXPD,
+ UC_X86_INS_MAXPS,
+ UC_X86_INS_MAXSD,
+ UC_X86_INS_MAXSS,
+ UC_X86_INS_MFENCE,
+ UC_X86_INS_MINPD,
+ UC_X86_INS_MINPS,
+ UC_X86_INS_MINSD,
+ UC_X86_INS_MINSS,
+ UC_X86_INS_CVTPD2PI,
+ UC_X86_INS_CVTPI2PD,
+ UC_X86_INS_CVTPI2PS,
+ UC_X86_INS_CVTPS2PI,
+ UC_X86_INS_CVTTPD2PI,
+ UC_X86_INS_CVTTPS2PI,
+ UC_X86_INS_EMMS,
+ UC_X86_INS_MASKMOVQ,
+ UC_X86_INS_MOVD,
+ UC_X86_INS_MOVDQ2Q,
+ UC_X86_INS_MOVNTQ,
+ UC_X86_INS_MOVQ2DQ,
+ UC_X86_INS_MOVQ,
+ UC_X86_INS_PABSB,
+ UC_X86_INS_PABSD,
+ UC_X86_INS_PABSW,
+ UC_X86_INS_PACKSSDW,
+ UC_X86_INS_PACKSSWB,
+ UC_X86_INS_PACKUSWB,
+ UC_X86_INS_PADDB,
+ UC_X86_INS_PADDD,
+ UC_X86_INS_PADDQ,
+ UC_X86_INS_PADDSB,
+ UC_X86_INS_PADDSW,
+ UC_X86_INS_PADDUSB,
+ UC_X86_INS_PADDUSW,
+ UC_X86_INS_PADDW,
+ UC_X86_INS_PALIGNR,
+ UC_X86_INS_PANDN,
+ UC_X86_INS_PAND,
+ UC_X86_INS_PAVGB,
+ UC_X86_INS_PAVGW,
+ UC_X86_INS_PCMPEQB,
+ UC_X86_INS_PCMPEQD,
+ UC_X86_INS_PCMPEQW,
+ UC_X86_INS_PCMPGTB,
+ UC_X86_INS_PCMPGTD,
+ UC_X86_INS_PCMPGTW,
+ UC_X86_INS_PEXTRW,
+ UC_X86_INS_PHADDSW,
+ UC_X86_INS_PHADDW,
+ UC_X86_INS_PHADDD,
+ UC_X86_INS_PHSUBD,
+ UC_X86_INS_PHSUBSW,
+ UC_X86_INS_PHSUBW,
+ UC_X86_INS_PINSRW,
+ UC_X86_INS_PMADDUBSW,
+ UC_X86_INS_PMADDWD,
+ UC_X86_INS_PMAXSW,
+ UC_X86_INS_PMAXUB,
+ UC_X86_INS_PMINSW,
+ UC_X86_INS_PMINUB,
+ UC_X86_INS_PMOVMSKB,
+ UC_X86_INS_PMULHRSW,
+ UC_X86_INS_PMULHUW,
+ UC_X86_INS_PMULHW,
+ UC_X86_INS_PMULLW,
+ UC_X86_INS_PMULUDQ,
+ UC_X86_INS_POR,
+ UC_X86_INS_PSADBW,
+ UC_X86_INS_PSHUFB,
+ UC_X86_INS_PSHUFW,
+ UC_X86_INS_PSIGNB,
+ UC_X86_INS_PSIGND,
+ UC_X86_INS_PSIGNW,
+ UC_X86_INS_PSLLD,
+ UC_X86_INS_PSLLQ,
+ UC_X86_INS_PSLLW,
+ UC_X86_INS_PSRAD,
+ UC_X86_INS_PSRAW,
+ UC_X86_INS_PSRLD,
+ UC_X86_INS_PSRLQ,
+ UC_X86_INS_PSRLW,
+ UC_X86_INS_PSUBB,
+ UC_X86_INS_PSUBD,
+ UC_X86_INS_PSUBQ,
+ UC_X86_INS_PSUBSB,
+ UC_X86_INS_PSUBSW,
+ UC_X86_INS_PSUBUSB,
+ UC_X86_INS_PSUBUSW,
+ UC_X86_INS_PSUBW,
+ UC_X86_INS_PUNPCKHBW,
+ UC_X86_INS_PUNPCKHDQ,
+ UC_X86_INS_PUNPCKHWD,
+ UC_X86_INS_PUNPCKLBW,
+ UC_X86_INS_PUNPCKLDQ,
+ UC_X86_INS_PUNPCKLWD,
+ UC_X86_INS_PXOR,
+ UC_X86_INS_MONITOR,
+ UC_X86_INS_MONTMUL,
+ UC_X86_INS_MOV,
+ UC_X86_INS_MOVABS,
+ UC_X86_INS_MOVBE,
+ UC_X86_INS_MOVDDUP,
+ UC_X86_INS_MOVDQA,
+ UC_X86_INS_MOVDQU,
+ UC_X86_INS_MOVHLPS,
+ UC_X86_INS_MOVHPD,
+ UC_X86_INS_MOVHPS,
+ UC_X86_INS_MOVLHPS,
+ UC_X86_INS_MOVLPD,
+ UC_X86_INS_MOVLPS,
+ UC_X86_INS_MOVMSKPD,
+ UC_X86_INS_MOVMSKPS,
+ UC_X86_INS_MOVNTDQA,
+ UC_X86_INS_MOVNTDQ,
+ UC_X86_INS_MOVNTI,
+ UC_X86_INS_MOVNTPD,
+ UC_X86_INS_MOVNTPS,
+ UC_X86_INS_MOVNTSD,
+ UC_X86_INS_MOVNTSS,
+ UC_X86_INS_MOVSB,
+ UC_X86_INS_MOVSD,
+ UC_X86_INS_MOVSHDUP,
+ UC_X86_INS_MOVSLDUP,
+ UC_X86_INS_MOVSQ,
+ UC_X86_INS_MOVSS,
+ UC_X86_INS_MOVSW,
+ UC_X86_INS_MOVSX,
+ UC_X86_INS_MOVSXD,
+ UC_X86_INS_MOVUPD,
+ UC_X86_INS_MOVUPS,
+ UC_X86_INS_MOVZX,
+ UC_X86_INS_MPSADBW,
+ UC_X86_INS_MUL,
+ UC_X86_INS_MULPD,
+ UC_X86_INS_MULPS,
+ UC_X86_INS_MULSD,
+ UC_X86_INS_MULSS,
+ UC_X86_INS_MULX,
+ UC_X86_INS_FMUL,
+ UC_X86_INS_FIMUL,
+ UC_X86_INS_FMULP,
+ UC_X86_INS_MWAIT,
+ UC_X86_INS_NEG,
+ UC_X86_INS_NOP,
+ UC_X86_INS_NOT,
+ UC_X86_INS_OUT,
+ UC_X86_INS_OUTSB,
+ UC_X86_INS_OUTSD,
+ UC_X86_INS_OUTSW,
+ UC_X86_INS_PACKUSDW,
+ UC_X86_INS_PAUSE,
+ UC_X86_INS_PAVGUSB,
+ UC_X86_INS_PBLENDVB,
+ UC_X86_INS_PBLENDW,
+ UC_X86_INS_PCLMULQDQ,
+ UC_X86_INS_PCMPEQQ,
+ UC_X86_INS_PCMPESTRI,
+ UC_X86_INS_PCMPESTRM,
+ UC_X86_INS_PCMPGTQ,
+ UC_X86_INS_PCMPISTRI,
+ UC_X86_INS_PCMPISTRM,
+ UC_X86_INS_PCOMMIT,
+ UC_X86_INS_PDEP,
+ UC_X86_INS_PEXT,
+ UC_X86_INS_PEXTRB,
+ UC_X86_INS_PEXTRD,
+ UC_X86_INS_PEXTRQ,
+ UC_X86_INS_PF2ID,
+ UC_X86_INS_PF2IW,
+ UC_X86_INS_PFACC,
+ UC_X86_INS_PFADD,
+ UC_X86_INS_PFCMPEQ,
+ UC_X86_INS_PFCMPGE,
+ UC_X86_INS_PFCMPGT,
+ UC_X86_INS_PFMAX,
+ UC_X86_INS_PFMIN,
+ UC_X86_INS_PFMUL,
+ UC_X86_INS_PFNACC,
+ UC_X86_INS_PFPNACC,
+ UC_X86_INS_PFRCPIT1,
+ UC_X86_INS_PFRCPIT2,
+ UC_X86_INS_PFRCP,
+ UC_X86_INS_PFRSQIT1,
+ UC_X86_INS_PFRSQRT,
+ UC_X86_INS_PFSUBR,
+ UC_X86_INS_PFSUB,
+ UC_X86_INS_PHMINPOSUW,
+ UC_X86_INS_PI2FD,
+ UC_X86_INS_PI2FW,
+ UC_X86_INS_PINSRB,
+ UC_X86_INS_PINSRD,
+ UC_X86_INS_PINSRQ,
+ UC_X86_INS_PMAXSB,
+ UC_X86_INS_PMAXSD,
+ UC_X86_INS_PMAXUD,
+ UC_X86_INS_PMAXUW,
+ UC_X86_INS_PMINSB,
+ UC_X86_INS_PMINSD,
+ UC_X86_INS_PMINUD,
+ UC_X86_INS_PMINUW,
+ UC_X86_INS_PMOVSXBD,
+ UC_X86_INS_PMOVSXBQ,
+ UC_X86_INS_PMOVSXBW,
+ UC_X86_INS_PMOVSXDQ,
+ UC_X86_INS_PMOVSXWD,
+ UC_X86_INS_PMOVSXWQ,
+ UC_X86_INS_PMOVZXBD,
+ UC_X86_INS_PMOVZXBQ,
+ UC_X86_INS_PMOVZXBW,
+ UC_X86_INS_PMOVZXDQ,
+ UC_X86_INS_PMOVZXWD,
+ UC_X86_INS_PMOVZXWQ,
+ UC_X86_INS_PMULDQ,
+ UC_X86_INS_PMULHRW,
+ UC_X86_INS_PMULLD,
+ UC_X86_INS_POP,
+ UC_X86_INS_POPAW,
+ UC_X86_INS_POPAL,
+ UC_X86_INS_POPCNT,
+ UC_X86_INS_POPF,
+ UC_X86_INS_POPFD,
+ UC_X86_INS_POPFQ,
+ UC_X86_INS_PREFETCH,
+ UC_X86_INS_PREFETCHNTA,
+ UC_X86_INS_PREFETCHT0,
+ UC_X86_INS_PREFETCHT1,
+ UC_X86_INS_PREFETCHT2,
+ UC_X86_INS_PREFETCHW,
+ UC_X86_INS_PSHUFD,
+ UC_X86_INS_PSHUFHW,
+ UC_X86_INS_PSHUFLW,
+ UC_X86_INS_PSLLDQ,
+ UC_X86_INS_PSRLDQ,
+ UC_X86_INS_PSWAPD,
+ UC_X86_INS_PTEST,
+ UC_X86_INS_PUNPCKHQDQ,
+ UC_X86_INS_PUNPCKLQDQ,
+ UC_X86_INS_PUSH,
+ UC_X86_INS_PUSHAW,
+ UC_X86_INS_PUSHAL,
+ UC_X86_INS_PUSHF,
+ UC_X86_INS_PUSHFD,
+ UC_X86_INS_PUSHFQ,
+ UC_X86_INS_RCL,
+ UC_X86_INS_RCPPS,
+ UC_X86_INS_RCPSS,
+ UC_X86_INS_RCR,
+ UC_X86_INS_RDFSBASE,
+ UC_X86_INS_RDGSBASE,
+ UC_X86_INS_RDMSR,
+ UC_X86_INS_RDPMC,
+ UC_X86_INS_RDRAND,
+ UC_X86_INS_RDSEED,
+ UC_X86_INS_RDTSC,
+ UC_X86_INS_RDTSCP,
+ UC_X86_INS_ROL,
+ UC_X86_INS_ROR,
+ UC_X86_INS_RORX,
+ UC_X86_INS_ROUNDPD,
+ UC_X86_INS_ROUNDPS,
+ UC_X86_INS_ROUNDSD,
+ UC_X86_INS_ROUNDSS,
+ UC_X86_INS_RSM,
+ UC_X86_INS_RSQRTPS,
+ UC_X86_INS_RSQRTSS,
+ UC_X86_INS_SAHF,
+ UC_X86_INS_SAL,
+ UC_X86_INS_SALC,
+ UC_X86_INS_SAR,
+ UC_X86_INS_SARX,
+ UC_X86_INS_SBB,
+ UC_X86_INS_SCASB,
+ UC_X86_INS_SCASD,
+ UC_X86_INS_SCASQ,
+ UC_X86_INS_SCASW,
+ UC_X86_INS_SETAE,
+ UC_X86_INS_SETA,
+ UC_X86_INS_SETBE,
+ UC_X86_INS_SETB,
+ UC_X86_INS_SETE,
+ UC_X86_INS_SETGE,
+ UC_X86_INS_SETG,
+ UC_X86_INS_SETLE,
+ UC_X86_INS_SETL,
+ UC_X86_INS_SETNE,
+ UC_X86_INS_SETNO,
+ UC_X86_INS_SETNP,
+ UC_X86_INS_SETNS,
+ UC_X86_INS_SETO,
+ UC_X86_INS_SETP,
+ UC_X86_INS_SETS,
+ UC_X86_INS_SFENCE,
+ UC_X86_INS_SGDT,
+ UC_X86_INS_SHA1MSG1,
+ UC_X86_INS_SHA1MSG2,
+ UC_X86_INS_SHA1NEXTE,
+ UC_X86_INS_SHA1RNDS4,
+ UC_X86_INS_SHA256MSG1,
+ UC_X86_INS_SHA256MSG2,
+ UC_X86_INS_SHA256RNDS2,
+ UC_X86_INS_SHL,
+ UC_X86_INS_SHLD,
+ UC_X86_INS_SHLX,
+ UC_X86_INS_SHR,
+ UC_X86_INS_SHRD,
+ UC_X86_INS_SHRX,
+ UC_X86_INS_SHUFPD,
+ UC_X86_INS_SHUFPS,
+ UC_X86_INS_SIDT,
+ UC_X86_INS_FSIN,
+ UC_X86_INS_SKINIT,
+ UC_X86_INS_SLDT,
+ UC_X86_INS_SMSW,
+ UC_X86_INS_SQRTPD,
+ UC_X86_INS_SQRTPS,
+ UC_X86_INS_SQRTSD,
+ UC_X86_INS_SQRTSS,
+ UC_X86_INS_FSQRT,
+ UC_X86_INS_STAC,
+ UC_X86_INS_STC,
+ UC_X86_INS_STD,
+ UC_X86_INS_STGI,
+ UC_X86_INS_STI,
+ UC_X86_INS_STMXCSR,
+ UC_X86_INS_STOSB,
+ UC_X86_INS_STOSD,
+ UC_X86_INS_STOSQ,
+ UC_X86_INS_STOSW,
+ UC_X86_INS_STR,
+ UC_X86_INS_FST,
+ UC_X86_INS_FSTP,
+ UC_X86_INS_FSTPNCE,
+ UC_X86_INS_FXCH,
+ UC_X86_INS_SUBPD,
+ UC_X86_INS_SUBPS,
+ UC_X86_INS_FSUBR,
+ UC_X86_INS_FISUBR,
+ UC_X86_INS_FSUBRP,
+ UC_X86_INS_SUBSD,
+ UC_X86_INS_SUBSS,
+ UC_X86_INS_FSUB,
+ UC_X86_INS_FISUB,
+ UC_X86_INS_FSUBP,
+ UC_X86_INS_SWAPGS,
+ UC_X86_INS_SYSCALL,
+ UC_X86_INS_SYSENTER,
+ UC_X86_INS_SYSEXIT,
+ UC_X86_INS_SYSRET,
+ UC_X86_INS_T1MSKC,
+ UC_X86_INS_TEST,
+ UC_X86_INS_UD2,
+ UC_X86_INS_FTST,
+ UC_X86_INS_TZCNT,
+ UC_X86_INS_TZMSK,
+ UC_X86_INS_FUCOMPI,
+ UC_X86_INS_FUCOMI,
+ UC_X86_INS_FUCOMPP,
+ UC_X86_INS_FUCOMP,
+ UC_X86_INS_FUCOM,
+ UC_X86_INS_UD2B,
+ UC_X86_INS_UNPCKHPD,
+ UC_X86_INS_UNPCKHPS,
+ UC_X86_INS_UNPCKLPD,
+ UC_X86_INS_UNPCKLPS,
+ UC_X86_INS_VADDPD,
+ UC_X86_INS_VADDPS,
+ UC_X86_INS_VADDSD,
+ UC_X86_INS_VADDSS,
+ UC_X86_INS_VADDSUBPD,
+ UC_X86_INS_VADDSUBPS,
+ UC_X86_INS_VAESDECLAST,
+ UC_X86_INS_VAESDEC,
+ UC_X86_INS_VAESENCLAST,
+ UC_X86_INS_VAESENC,
+ UC_X86_INS_VAESIMC,
+ UC_X86_INS_VAESKEYGENASSIST,
+ UC_X86_INS_VALIGND,
+ UC_X86_INS_VALIGNQ,
+ UC_X86_INS_VANDNPD,
+ UC_X86_INS_VANDNPS,
+ UC_X86_INS_VANDPD,
+ UC_X86_INS_VANDPS,
+ UC_X86_INS_VBLENDMPD,
+ UC_X86_INS_VBLENDMPS,
+ UC_X86_INS_VBLENDPD,
+ UC_X86_INS_VBLENDPS,
+ UC_X86_INS_VBLENDVPD,
+ UC_X86_INS_VBLENDVPS,
+ UC_X86_INS_VBROADCASTF128,
+ UC_X86_INS_VBROADCASTI32X4,
+ UC_X86_INS_VBROADCASTI64X4,
+ UC_X86_INS_VBROADCASTSD,
+ UC_X86_INS_VBROADCASTSS,
+ UC_X86_INS_VCMPPD,
+ UC_X86_INS_VCMPPS,
+ UC_X86_INS_VCMPSD,
+ UC_X86_INS_VCMPSS,
+ UC_X86_INS_VCOMPRESSPD,
+ UC_X86_INS_VCOMPRESSPS,
+ UC_X86_INS_VCVTDQ2PD,
+ UC_X86_INS_VCVTDQ2PS,
+ UC_X86_INS_VCVTPD2DQX,
+ UC_X86_INS_VCVTPD2DQ,
+ UC_X86_INS_VCVTPD2PSX,
+ UC_X86_INS_VCVTPD2PS,
+ UC_X86_INS_VCVTPD2UDQ,
+ UC_X86_INS_VCVTPH2PS,
+ UC_X86_INS_VCVTPS2DQ,
+ UC_X86_INS_VCVTPS2PD,
+ UC_X86_INS_VCVTPS2PH,
+ UC_X86_INS_VCVTPS2UDQ,
+ UC_X86_INS_VCVTSD2SI,
+ UC_X86_INS_VCVTSD2USI,
+ UC_X86_INS_VCVTSS2SI,
+ UC_X86_INS_VCVTSS2USI,
+ UC_X86_INS_VCVTTPD2DQX,
+ UC_X86_INS_VCVTTPD2DQ,
+ UC_X86_INS_VCVTTPD2UDQ,
+ UC_X86_INS_VCVTTPS2DQ,
+ UC_X86_INS_VCVTTPS2UDQ,
+ UC_X86_INS_VCVTUDQ2PD,
+ UC_X86_INS_VCVTUDQ2PS,
+ UC_X86_INS_VDIVPD,
+ UC_X86_INS_VDIVPS,
+ UC_X86_INS_VDIVSD,
+ UC_X86_INS_VDIVSS,
+ UC_X86_INS_VDPPD,
+ UC_X86_INS_VDPPS,
+ UC_X86_INS_VERR,
+ UC_X86_INS_VERW,
+ UC_X86_INS_VEXP2PD,
+ UC_X86_INS_VEXP2PS,
+ UC_X86_INS_VEXPANDPD,
+ UC_X86_INS_VEXPANDPS,
+ UC_X86_INS_VEXTRACTF128,
+ UC_X86_INS_VEXTRACTF32X4,
+ UC_X86_INS_VEXTRACTF64X4,
+ UC_X86_INS_VEXTRACTI128,
+ UC_X86_INS_VEXTRACTI32X4,
+ UC_X86_INS_VEXTRACTI64X4,
+ UC_X86_INS_VEXTRACTPS,
+ UC_X86_INS_VFMADD132PD,
+ UC_X86_INS_VFMADD132PS,
+ UC_X86_INS_VFMADDPD,
+ UC_X86_INS_VFMADD213PD,
+ UC_X86_INS_VFMADD231PD,
+ UC_X86_INS_VFMADDPS,
+ UC_X86_INS_VFMADD213PS,
+ UC_X86_INS_VFMADD231PS,
+ UC_X86_INS_VFMADDSD,
+ UC_X86_INS_VFMADD213SD,
+ UC_X86_INS_VFMADD132SD,
+ UC_X86_INS_VFMADD231SD,
+ UC_X86_INS_VFMADDSS,
+ UC_X86_INS_VFMADD213SS,
+ UC_X86_INS_VFMADD132SS,
+ UC_X86_INS_VFMADD231SS,
+ UC_X86_INS_VFMADDSUB132PD,
+ UC_X86_INS_VFMADDSUB132PS,
+ UC_X86_INS_VFMADDSUBPD,
+ UC_X86_INS_VFMADDSUB213PD,
+ UC_X86_INS_VFMADDSUB231PD,
+ UC_X86_INS_VFMADDSUBPS,
+ UC_X86_INS_VFMADDSUB213PS,
+ UC_X86_INS_VFMADDSUB231PS,
+ UC_X86_INS_VFMSUB132PD,
+ UC_X86_INS_VFMSUB132PS,
+ UC_X86_INS_VFMSUBADD132PD,
+ UC_X86_INS_VFMSUBADD132PS,
+ UC_X86_INS_VFMSUBADDPD,
+ UC_X86_INS_VFMSUBADD213PD,
+ UC_X86_INS_VFMSUBADD231PD,
+ UC_X86_INS_VFMSUBADDPS,
+ UC_X86_INS_VFMSUBADD213PS,
+ UC_X86_INS_VFMSUBADD231PS,
+ UC_X86_INS_VFMSUBPD,
+ UC_X86_INS_VFMSUB213PD,
+ UC_X86_INS_VFMSUB231PD,
+ UC_X86_INS_VFMSUBPS,
+ UC_X86_INS_VFMSUB213PS,
+ UC_X86_INS_VFMSUB231PS,
+ UC_X86_INS_VFMSUBSD,
+ UC_X86_INS_VFMSUB213SD,
+ UC_X86_INS_VFMSUB132SD,
+ UC_X86_INS_VFMSUB231SD,
+ UC_X86_INS_VFMSUBSS,
+ UC_X86_INS_VFMSUB213SS,
+ UC_X86_INS_VFMSUB132SS,
+ UC_X86_INS_VFMSUB231SS,
+ UC_X86_INS_VFNMADD132PD,
+ UC_X86_INS_VFNMADD132PS,
+ UC_X86_INS_VFNMADDPD,
+ UC_X86_INS_VFNMADD213PD,
+ UC_X86_INS_VFNMADD231PD,
+ UC_X86_INS_VFNMADDPS,
+ UC_X86_INS_VFNMADD213PS,
+ UC_X86_INS_VFNMADD231PS,
+ UC_X86_INS_VFNMADDSD,
+ UC_X86_INS_VFNMADD213SD,
+ UC_X86_INS_VFNMADD132SD,
+ UC_X86_INS_VFNMADD231SD,
+ UC_X86_INS_VFNMADDSS,
+ UC_X86_INS_VFNMADD213SS,
+ UC_X86_INS_VFNMADD132SS,
+ UC_X86_INS_VFNMADD231SS,
+ UC_X86_INS_VFNMSUB132PD,
+ UC_X86_INS_VFNMSUB132PS,
+ UC_X86_INS_VFNMSUBPD,
+ UC_X86_INS_VFNMSUB213PD,
+ UC_X86_INS_VFNMSUB231PD,
+ UC_X86_INS_VFNMSUBPS,
+ UC_X86_INS_VFNMSUB213PS,
+ UC_X86_INS_VFNMSUB231PS,
+ UC_X86_INS_VFNMSUBSD,
+ UC_X86_INS_VFNMSUB213SD,
+ UC_X86_INS_VFNMSUB132SD,
+ UC_X86_INS_VFNMSUB231SD,
+ UC_X86_INS_VFNMSUBSS,
+ UC_X86_INS_VFNMSUB213SS,
+ UC_X86_INS_VFNMSUB132SS,
+ UC_X86_INS_VFNMSUB231SS,
+ UC_X86_INS_VFRCZPD,
+ UC_X86_INS_VFRCZPS,
+ UC_X86_INS_VFRCZSD,
+ UC_X86_INS_VFRCZSS,
+ UC_X86_INS_VORPD,
+ UC_X86_INS_VORPS,
+ UC_X86_INS_VXORPD,
+ UC_X86_INS_VXORPS,
+ UC_X86_INS_VGATHERDPD,
+ UC_X86_INS_VGATHERDPS,
+ UC_X86_INS_VGATHERPF0DPD,
+ UC_X86_INS_VGATHERPF0DPS,
+ UC_X86_INS_VGATHERPF0QPD,
+ UC_X86_INS_VGATHERPF0QPS,
+ UC_X86_INS_VGATHERPF1DPD,
+ UC_X86_INS_VGATHERPF1DPS,
+ UC_X86_INS_VGATHERPF1QPD,
+ UC_X86_INS_VGATHERPF1QPS,
+ UC_X86_INS_VGATHERQPD,
+ UC_X86_INS_VGATHERQPS,
+ UC_X86_INS_VHADDPD,
+ UC_X86_INS_VHADDPS,
+ UC_X86_INS_VHSUBPD,
+ UC_X86_INS_VHSUBPS,
+ UC_X86_INS_VINSERTF128,
+ UC_X86_INS_VINSERTF32X4,
+ UC_X86_INS_VINSERTF32X8,
+ UC_X86_INS_VINSERTF64X2,
+ UC_X86_INS_VINSERTF64X4,
+ UC_X86_INS_VINSERTI128,
+ UC_X86_INS_VINSERTI32X4,
+ UC_X86_INS_VINSERTI32X8,
+ UC_X86_INS_VINSERTI64X2,
+ UC_X86_INS_VINSERTI64X4,
+ UC_X86_INS_VINSERTPS,
+ UC_X86_INS_VLDDQU,
+ UC_X86_INS_VLDMXCSR,
+ UC_X86_INS_VMASKMOVDQU,
+ UC_X86_INS_VMASKMOVPD,
+ UC_X86_INS_VMASKMOVPS,
+ UC_X86_INS_VMAXPD,
+ UC_X86_INS_VMAXPS,
+ UC_X86_INS_VMAXSD,
+ UC_X86_INS_VMAXSS,
+ UC_X86_INS_VMCALL,
+ UC_X86_INS_VMCLEAR,
+ UC_X86_INS_VMFUNC,
+ UC_X86_INS_VMINPD,
+ UC_X86_INS_VMINPS,
+ UC_X86_INS_VMINSD,
+ UC_X86_INS_VMINSS,
+ UC_X86_INS_VMLAUNCH,
+ UC_X86_INS_VMLOAD,
+ UC_X86_INS_VMMCALL,
+ UC_X86_INS_VMOVQ,
+ UC_X86_INS_VMOVDDUP,
+ UC_X86_INS_VMOVD,
+ UC_X86_INS_VMOVDQA32,
+ UC_X86_INS_VMOVDQA64,
+ UC_X86_INS_VMOVDQA,
+ UC_X86_INS_VMOVDQU16,
+ UC_X86_INS_VMOVDQU32,
+ UC_X86_INS_VMOVDQU64,
+ UC_X86_INS_VMOVDQU8,
+ UC_X86_INS_VMOVDQU,
+ UC_X86_INS_VMOVHLPS,
+ UC_X86_INS_VMOVHPD,
+ UC_X86_INS_VMOVHPS,
+ UC_X86_INS_VMOVLHPS,
+ UC_X86_INS_VMOVLPD,
+ UC_X86_INS_VMOVLPS,
+ UC_X86_INS_VMOVMSKPD,
+ UC_X86_INS_VMOVMSKPS,
+ UC_X86_INS_VMOVNTDQA,
+ UC_X86_INS_VMOVNTDQ,
+ UC_X86_INS_VMOVNTPD,
+ UC_X86_INS_VMOVNTPS,
+ UC_X86_INS_VMOVSD,
+ UC_X86_INS_VMOVSHDUP,
+ UC_X86_INS_VMOVSLDUP,
+ UC_X86_INS_VMOVSS,
+ UC_X86_INS_VMOVUPD,
+ UC_X86_INS_VMOVUPS,
+ UC_X86_INS_VMPSADBW,
+ UC_X86_INS_VMPTRLD,
+ UC_X86_INS_VMPTRST,
+ UC_X86_INS_VMREAD,
+ UC_X86_INS_VMRESUME,
+ UC_X86_INS_VMRUN,
+ UC_X86_INS_VMSAVE,
+ UC_X86_INS_VMULPD,
+ UC_X86_INS_VMULPS,
+ UC_X86_INS_VMULSD,
+ UC_X86_INS_VMULSS,
+ UC_X86_INS_VMWRITE,
+ UC_X86_INS_VMXOFF,
+ UC_X86_INS_VMXON,
+ UC_X86_INS_VPABSB,
+ UC_X86_INS_VPABSD,
+ UC_X86_INS_VPABSQ,
+ UC_X86_INS_VPABSW,
+ UC_X86_INS_VPACKSSDW,
+ UC_X86_INS_VPACKSSWB,
+ UC_X86_INS_VPACKUSDW,
+ UC_X86_INS_VPACKUSWB,
+ UC_X86_INS_VPADDB,
+ UC_X86_INS_VPADDD,
+ UC_X86_INS_VPADDQ,
+ UC_X86_INS_VPADDSB,
+ UC_X86_INS_VPADDSW,
+ UC_X86_INS_VPADDUSB,
+ UC_X86_INS_VPADDUSW,
+ UC_X86_INS_VPADDW,
+ UC_X86_INS_VPALIGNR,
+ UC_X86_INS_VPANDD,
+ UC_X86_INS_VPANDND,
+ UC_X86_INS_VPANDNQ,
+ UC_X86_INS_VPANDN,
+ UC_X86_INS_VPANDQ,
+ UC_X86_INS_VPAND,
+ UC_X86_INS_VPAVGB,
+ UC_X86_INS_VPAVGW,
+ UC_X86_INS_VPBLENDD,
+ UC_X86_INS_VPBLENDMB,
+ UC_X86_INS_VPBLENDMD,
+ UC_X86_INS_VPBLENDMQ,
+ UC_X86_INS_VPBLENDMW,
+ UC_X86_INS_VPBLENDVB,
+ UC_X86_INS_VPBLENDW,
+ UC_X86_INS_VPBROADCASTB,
+ UC_X86_INS_VPBROADCASTD,
+ UC_X86_INS_VPBROADCASTMB2Q,
+ UC_X86_INS_VPBROADCASTMW2D,
+ UC_X86_INS_VPBROADCASTQ,
+ UC_X86_INS_VPBROADCASTW,
+ UC_X86_INS_VPCLMULQDQ,
+ UC_X86_INS_VPCMOV,
+ UC_X86_INS_VPCMPB,
+ UC_X86_INS_VPCMPD,
+ UC_X86_INS_VPCMPEQB,
+ UC_X86_INS_VPCMPEQD,
+ UC_X86_INS_VPCMPEQQ,
+ UC_X86_INS_VPCMPEQW,
+ UC_X86_INS_VPCMPESTRI,
+ UC_X86_INS_VPCMPESTRM,
+ UC_X86_INS_VPCMPGTB,
+ UC_X86_INS_VPCMPGTD,
+ UC_X86_INS_VPCMPGTQ,
+ UC_X86_INS_VPCMPGTW,
+ UC_X86_INS_VPCMPISTRI,
+ UC_X86_INS_VPCMPISTRM,
+ UC_X86_INS_VPCMPQ,
+ UC_X86_INS_VPCMPUB,
+ UC_X86_INS_VPCMPUD,
+ UC_X86_INS_VPCMPUQ,
+ UC_X86_INS_VPCMPUW,
+ UC_X86_INS_VPCMPW,
+ UC_X86_INS_VPCOMB,
+ UC_X86_INS_VPCOMD,
+ UC_X86_INS_VPCOMPRESSD,
+ UC_X86_INS_VPCOMPRESSQ,
+ UC_X86_INS_VPCOMQ,
+ UC_X86_INS_VPCOMUB,
+ UC_X86_INS_VPCOMUD,
+ UC_X86_INS_VPCOMUQ,
+ UC_X86_INS_VPCOMUW,
+ UC_X86_INS_VPCOMW,
+ UC_X86_INS_VPCONFLICTD,
+ UC_X86_INS_VPCONFLICTQ,
+ UC_X86_INS_VPERM2F128,
+ UC_X86_INS_VPERM2I128,
+ UC_X86_INS_VPERMD,
+ UC_X86_INS_VPERMI2D,
+ UC_X86_INS_VPERMI2PD,
+ UC_X86_INS_VPERMI2PS,
+ UC_X86_INS_VPERMI2Q,
+ UC_X86_INS_VPERMIL2PD,
+ UC_X86_INS_VPERMIL2PS,
+ UC_X86_INS_VPERMILPD,
+ UC_X86_INS_VPERMILPS,
+ UC_X86_INS_VPERMPD,
+ UC_X86_INS_VPERMPS,
+ UC_X86_INS_VPERMQ,
+ UC_X86_INS_VPERMT2D,
+ UC_X86_INS_VPERMT2PD,
+ UC_X86_INS_VPERMT2PS,
+ UC_X86_INS_VPERMT2Q,
+ UC_X86_INS_VPEXPANDD,
+ UC_X86_INS_VPEXPANDQ,
+ UC_X86_INS_VPEXTRB,
+ UC_X86_INS_VPEXTRD,
+ UC_X86_INS_VPEXTRQ,
+ UC_X86_INS_VPEXTRW,
+ UC_X86_INS_VPGATHERDD,
+ UC_X86_INS_VPGATHERDQ,
+ UC_X86_INS_VPGATHERQD,
+ UC_X86_INS_VPGATHERQQ,
+ UC_X86_INS_VPHADDBD,
+ UC_X86_INS_VPHADDBQ,
+ UC_X86_INS_VPHADDBW,
+ UC_X86_INS_VPHADDDQ,
+ UC_X86_INS_VPHADDD,
+ UC_X86_INS_VPHADDSW,
+ UC_X86_INS_VPHADDUBD,
+ UC_X86_INS_VPHADDUBQ,
+ UC_X86_INS_VPHADDUBW,
+ UC_X86_INS_VPHADDUDQ,
+ UC_X86_INS_VPHADDUWD,
+ UC_X86_INS_VPHADDUWQ,
+ UC_X86_INS_VPHADDWD,
+ UC_X86_INS_VPHADDWQ,
+ UC_X86_INS_VPHADDW,
+ UC_X86_INS_VPHMINPOSUW,
+ UC_X86_INS_VPHSUBBW,
+ UC_X86_INS_VPHSUBDQ,
+ UC_X86_INS_VPHSUBD,
+ UC_X86_INS_VPHSUBSW,
+ UC_X86_INS_VPHSUBWD,
+ UC_X86_INS_VPHSUBW,
+ UC_X86_INS_VPINSRB,
+ UC_X86_INS_VPINSRD,
+ UC_X86_INS_VPINSRQ,
+ UC_X86_INS_VPINSRW,
+ UC_X86_INS_VPLZCNTD,
+ UC_X86_INS_VPLZCNTQ,
+ UC_X86_INS_VPMACSDD,
+ UC_X86_INS_VPMACSDQH,
+ UC_X86_INS_VPMACSDQL,
+ UC_X86_INS_VPMACSSDD,
+ UC_X86_INS_VPMACSSDQH,
+ UC_X86_INS_VPMACSSDQL,
+ UC_X86_INS_VPMACSSWD,
+ UC_X86_INS_VPMACSSWW,
+ UC_X86_INS_VPMACSWD,
+ UC_X86_INS_VPMACSWW,
+ UC_X86_INS_VPMADCSSWD,
+ UC_X86_INS_VPMADCSWD,
+ UC_X86_INS_VPMADDUBSW,
+ UC_X86_INS_VPMADDWD,
+ UC_X86_INS_VPMASKMOVD,
+ UC_X86_INS_VPMASKMOVQ,
+ UC_X86_INS_VPMAXSB,
+ UC_X86_INS_VPMAXSD,
+ UC_X86_INS_VPMAXSQ,
+ UC_X86_INS_VPMAXSW,
+ UC_X86_INS_VPMAXUB,
+ UC_X86_INS_VPMAXUD,
+ UC_X86_INS_VPMAXUQ,
+ UC_X86_INS_VPMAXUW,
+ UC_X86_INS_VPMINSB,
+ UC_X86_INS_VPMINSD,
+ UC_X86_INS_VPMINSQ,
+ UC_X86_INS_VPMINSW,
+ UC_X86_INS_VPMINUB,
+ UC_X86_INS_VPMINUD,
+ UC_X86_INS_VPMINUQ,
+ UC_X86_INS_VPMINUW,
+ UC_X86_INS_VPMOVDB,
+ UC_X86_INS_VPMOVDW,
+ UC_X86_INS_VPMOVM2B,
+ UC_X86_INS_VPMOVM2D,
+ UC_X86_INS_VPMOVM2Q,
+ UC_X86_INS_VPMOVM2W,
+ UC_X86_INS_VPMOVMSKB,
+ UC_X86_INS_VPMOVQB,
+ UC_X86_INS_VPMOVQD,
+ UC_X86_INS_VPMOVQW,
+ UC_X86_INS_VPMOVSDB,
+ UC_X86_INS_VPMOVSDW,
+ UC_X86_INS_VPMOVSQB,
+ UC_X86_INS_VPMOVSQD,
+ UC_X86_INS_VPMOVSQW,
+ UC_X86_INS_VPMOVSXBD,
+ UC_X86_INS_VPMOVSXBQ,
+ UC_X86_INS_VPMOVSXBW,
+ UC_X86_INS_VPMOVSXDQ,
+ UC_X86_INS_VPMOVSXWD,
+ UC_X86_INS_VPMOVSXWQ,
+ UC_X86_INS_VPMOVUSDB,
+ UC_X86_INS_VPMOVUSDW,
+ UC_X86_INS_VPMOVUSQB,
+ UC_X86_INS_VPMOVUSQD,
+ UC_X86_INS_VPMOVUSQW,
+ UC_X86_INS_VPMOVZXBD,
+ UC_X86_INS_VPMOVZXBQ,
+ UC_X86_INS_VPMOVZXBW,
+ UC_X86_INS_VPMOVZXDQ,
+ UC_X86_INS_VPMOVZXWD,
+ UC_X86_INS_VPMOVZXWQ,
+ UC_X86_INS_VPMULDQ,
+ UC_X86_INS_VPMULHRSW,
+ UC_X86_INS_VPMULHUW,
+ UC_X86_INS_VPMULHW,
+ UC_X86_INS_VPMULLD,
+ UC_X86_INS_VPMULLQ,
+ UC_X86_INS_VPMULLW,
+ UC_X86_INS_VPMULUDQ,
+ UC_X86_INS_VPORD,
+ UC_X86_INS_VPORQ,
+ UC_X86_INS_VPOR,
+ UC_X86_INS_VPPERM,
+ UC_X86_INS_VPROTB,
+ UC_X86_INS_VPROTD,
+ UC_X86_INS_VPROTQ,
+ UC_X86_INS_VPROTW,
+ UC_X86_INS_VPSADBW,
+ UC_X86_INS_VPSCATTERDD,
+ UC_X86_INS_VPSCATTERDQ,
+ UC_X86_INS_VPSCATTERQD,
+ UC_X86_INS_VPSCATTERQQ,
+ UC_X86_INS_VPSHAB,
+ UC_X86_INS_VPSHAD,
+ UC_X86_INS_VPSHAQ,
+ UC_X86_INS_VPSHAW,
+ UC_X86_INS_VPSHLB,
+ UC_X86_INS_VPSHLD,
+ UC_X86_INS_VPSHLQ,
+ UC_X86_INS_VPSHLW,
+ UC_X86_INS_VPSHUFB,
+ UC_X86_INS_VPSHUFD,
+ UC_X86_INS_VPSHUFHW,
+ UC_X86_INS_VPSHUFLW,
+ UC_X86_INS_VPSIGNB,
+ UC_X86_INS_VPSIGND,
+ UC_X86_INS_VPSIGNW,
+ UC_X86_INS_VPSLLDQ,
+ UC_X86_INS_VPSLLD,
+ UC_X86_INS_VPSLLQ,
+ UC_X86_INS_VPSLLVD,
+ UC_X86_INS_VPSLLVQ,
+ UC_X86_INS_VPSLLW,
+ UC_X86_INS_VPSRAD,
+ UC_X86_INS_VPSRAQ,
+ UC_X86_INS_VPSRAVD,
+ UC_X86_INS_VPSRAVQ,
+ UC_X86_INS_VPSRAW,
+ UC_X86_INS_VPSRLDQ,
+ UC_X86_INS_VPSRLD,
+ UC_X86_INS_VPSRLQ,
+ UC_X86_INS_VPSRLVD,
+ UC_X86_INS_VPSRLVQ,
+ UC_X86_INS_VPSRLW,
+ UC_X86_INS_VPSUBB,
+ UC_X86_INS_VPSUBD,
+ UC_X86_INS_VPSUBQ,
+ UC_X86_INS_VPSUBSB,
+ UC_X86_INS_VPSUBSW,
+ UC_X86_INS_VPSUBUSB,
+ UC_X86_INS_VPSUBUSW,
+ UC_X86_INS_VPSUBW,
+ UC_X86_INS_VPTESTMD,
+ UC_X86_INS_VPTESTMQ,
+ UC_X86_INS_VPTESTNMD,
+ UC_X86_INS_VPTESTNMQ,
+ UC_X86_INS_VPTEST,
+ UC_X86_INS_VPUNPCKHBW,
+ UC_X86_INS_VPUNPCKHDQ,
+ UC_X86_INS_VPUNPCKHQDQ,
+ UC_X86_INS_VPUNPCKHWD,
+ UC_X86_INS_VPUNPCKLBW,
+ UC_X86_INS_VPUNPCKLDQ,
+ UC_X86_INS_VPUNPCKLQDQ,
+ UC_X86_INS_VPUNPCKLWD,
+ UC_X86_INS_VPXORD,
+ UC_X86_INS_VPXORQ,
+ UC_X86_INS_VPXOR,
+ UC_X86_INS_VRCP14PD,
+ UC_X86_INS_VRCP14PS,
+ UC_X86_INS_VRCP14SD,
+ UC_X86_INS_VRCP14SS,
+ UC_X86_INS_VRCP28PD,
+ UC_X86_INS_VRCP28PS,
+ UC_X86_INS_VRCP28SD,
+ UC_X86_INS_VRCP28SS,
+ UC_X86_INS_VRCPPS,
+ UC_X86_INS_VRCPSS,
+ UC_X86_INS_VRNDSCALEPD,
+ UC_X86_INS_VRNDSCALEPS,
+ UC_X86_INS_VRNDSCALESD,
+ UC_X86_INS_VRNDSCALESS,
+ UC_X86_INS_VROUNDPD,
+ UC_X86_INS_VROUNDPS,
+ UC_X86_INS_VROUNDSD,
+ UC_X86_INS_VROUNDSS,
+ UC_X86_INS_VRSQRT14PD,
+ UC_X86_INS_VRSQRT14PS,
+ UC_X86_INS_VRSQRT14SD,
+ UC_X86_INS_VRSQRT14SS,
+ UC_X86_INS_VRSQRT28PD,
+ UC_X86_INS_VRSQRT28PS,
+ UC_X86_INS_VRSQRT28SD,
+ UC_X86_INS_VRSQRT28SS,
+ UC_X86_INS_VRSQRTPS,
+ UC_X86_INS_VRSQRTSS,
+ UC_X86_INS_VSCATTERDPD,
+ UC_X86_INS_VSCATTERDPS,
+ UC_X86_INS_VSCATTERPF0DPD,
+ UC_X86_INS_VSCATTERPF0DPS,
+ UC_X86_INS_VSCATTERPF0QPD,
+ UC_X86_INS_VSCATTERPF0QPS,
+ UC_X86_INS_VSCATTERPF1DPD,
+ UC_X86_INS_VSCATTERPF1DPS,
+ UC_X86_INS_VSCATTERPF1QPD,
+ UC_X86_INS_VSCATTERPF1QPS,
+ UC_X86_INS_VSCATTERQPD,
+ UC_X86_INS_VSCATTERQPS,
+ UC_X86_INS_VSHUFPD,
+ UC_X86_INS_VSHUFPS,
+ UC_X86_INS_VSQRTPD,
+ UC_X86_INS_VSQRTPS,
+ UC_X86_INS_VSQRTSD,
+ UC_X86_INS_VSQRTSS,
+ UC_X86_INS_VSTMXCSR,
+ UC_X86_INS_VSUBPD,
+ UC_X86_INS_VSUBPS,
+ UC_X86_INS_VSUBSD,
+ UC_X86_INS_VSUBSS,
+ UC_X86_INS_VTESTPD,
+ UC_X86_INS_VTESTPS,
+ UC_X86_INS_VUNPCKHPD,
+ UC_X86_INS_VUNPCKHPS,
+ UC_X86_INS_VUNPCKLPD,
+ UC_X86_INS_VUNPCKLPS,
+ UC_X86_INS_VZEROALL,
+ UC_X86_INS_VZEROUPPER,
+ UC_X86_INS_WAIT,
+ UC_X86_INS_WBINVD,
+ UC_X86_INS_WRFSBASE,
+ UC_X86_INS_WRGSBASE,
+ UC_X86_INS_WRMSR,
+ UC_X86_INS_XABORT,
+ UC_X86_INS_XACQUIRE,
+ UC_X86_INS_XBEGIN,
+ UC_X86_INS_XCHG,
+ UC_X86_INS_XCRYPTCBC,
+ UC_X86_INS_XCRYPTCFB,
+ UC_X86_INS_XCRYPTCTR,
+ UC_X86_INS_XCRYPTECB,
+ UC_X86_INS_XCRYPTOFB,
+ UC_X86_INS_XEND,
+ UC_X86_INS_XGETBV,
+ UC_X86_INS_XLATB,
+ UC_X86_INS_XRELEASE,
+ UC_X86_INS_XRSTOR,
+ UC_X86_INS_XRSTOR64,
+ UC_X86_INS_XRSTORS,
+ UC_X86_INS_XRSTORS64,
+ UC_X86_INS_XSAVE,
+ UC_X86_INS_XSAVE64,
+ UC_X86_INS_XSAVEC,
+ UC_X86_INS_XSAVEC64,
+ UC_X86_INS_XSAVEOPT,
+ UC_X86_INS_XSAVEOPT64,
+ UC_X86_INS_XSAVES,
+ UC_X86_INS_XSAVES64,
+ UC_X86_INS_XSETBV,
+ UC_X86_INS_XSHA1,
+ UC_X86_INS_XSHA256,
+ UC_X86_INS_XSTORE,
+ UC_X86_INS_XTEST,
+ UC_X86_INS_FDISI8087_NOP,
+ UC_X86_INS_FENI8087_NOP,
+
+ UC_X86_INS_ENDING, // mark the end of the list of insn
+} uc_x86_insn;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/app/src/main/cpp/unicorn/lib/arm64-v8a/libunicorn.so b/app/src/main/cpp/unicorn/lib/arm64-v8a/libunicorn.so
new file mode 100644
index 000000000..bd51d322f
Binary files /dev/null and b/app/src/main/cpp/unicorn/lib/arm64-v8a/libunicorn.so differ
diff --git a/app/src/main/java/gq/cyuubi/lightswitch/MainActivity.java b/app/src/main/java/gq/cyuubi/lightswitch/MainActivity.java
new file mode 100644
index 000000000..fbf47cb12
--- /dev/null
+++ b/app/src/main/java/gq/cyuubi/lightswitch/MainActivity.java
@@ -0,0 +1,30 @@
+package gq.cyuubi.lightswitch;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Bundle;
+import android.widget.TextView;
+
+public class MainActivity extends AppCompatActivity {
+
+ // Used to load the 'native-lib' library on application startup.
+ static {
+ System.loadLibrary("native-lib");
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ // Example of a call to a native method
+ TextView tv = findViewById(R.id.sample_text);
+ tv.setText(stringFromJNI());
+ }
+
+ /**
+ * A native method that is implemented by the 'native-lib' native library,
+ * which is packaged with this application.
+ */
+ public native String stringFromJNI();
+}
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 000000000..1f6bb2906
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 000000000..0d025f9bf
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 000000000..a4e8d403b
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 000000000..eca70cfe5
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 000000000..eca70cfe5
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..898f3ed59
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 000000000..dffca3601
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..64ba76f75
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 000000000..dae5e0823
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e5ed46597
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..14ed0af35
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b0907cac3
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..d8ae03154
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2c18de9e6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..beed3cdd2
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 000000000..69b22338c
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #008577
+ #00574B
+ #D81B60
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 000000000..2faa3b109
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Lightswitch
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 000000000..5885930df
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/app/src/test/java/gq/cyuubi/lightswitch/ExampleUnitTest.java b/app/src/test/java/gq/cyuubi/lightswitch/ExampleUnitTest.java
new file mode 100644
index 000000000..f8256cfe3
--- /dev/null
+++ b/app/src/test/java/gq/cyuubi/lightswitch/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package gq.cyuubi.lightswitch;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 000000000..02199bb82
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,27 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ google()
+ jcenter()
+
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.4.1'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 000000000..199d16ede
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,20 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 000000000..f6b961fd5
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 000000000..4a238e73d
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 28 17:28:16 EDT 2019
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100644
index 000000000..cccdd3d51
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 000000000..f9553162f
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 000000000..e7b4def49
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app'