add files, cannot figure out why native lib is broken
4
.idea/encodings.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
|
||||||
|
</project>
|
9
.idea/misc.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
</project>
|
9
.idea/modules.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/Lightswitch.iml" filepath="$PROJECT_DIR$/Lightswitch.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
12
.idea/runConfigurations.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RunConfigurationProducerService">
|
||||||
|
<option name="ignoredProducers">
|
||||||
|
<set>
|
||||||
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
||||||
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
||||||
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
1
app/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/build
|
54
app/CMakeLists.txt
Normal file
@ -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})
|
48
app/build.gradle
Normal file
@ -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'
|
||||||
|
}
|
21
app/proguard-rules.pro
vendored
Normal file
@ -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
|
@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||||
|
*/
|
||||||
|
@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());
|
||||||
|
}
|
||||||
|
}
|
21
app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="gq.cyuubi.lightswitch">
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
android:theme="@style/AppTheme">
|
||||||
|
<activity android:name=".MainActivity">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
19
app/src/main/cpp/native-lib.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <jni.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <unicorn/unicorn.h>
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
157
app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm.h
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/* Unicorn Engine */
|
||||||
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 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
|
307
app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/arm64.h
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
/* Unicorn Emulator Engine */
|
||||||
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 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
|
@ -0,0 +1,50 @@
|
|||||||
|
/* Unicorn Emulator Engine */
|
||||||
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 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
|
229
app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/mips.h
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
/* Unicorn Emulator Engine */
|
||||||
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 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
|
@ -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 <stdbool.h>
|
||||||
|
#endif // (_MSC_VER < MSC_VER_VS2013) || defined(_KERNEL_MODE)
|
||||||
|
|
||||||
|
#else
|
||||||
|
// not MSVC -> C99 is supported
|
||||||
|
#include <stdbool.h>
|
||||||
|
#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 <stdint.h>
|
||||||
|
#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 <inttypes.h>
|
||||||
|
#endif // #if defined(_MSC_VER) && (_MSC_VER < MSC_VER_VS2013) || defined(_KERNEL_MODE)
|
||||||
|
|
||||||
|
// sys/time.h compatibility
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#include <sys/timeb.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
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 <sys/time.h>
|
||||||
|
#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 <unistd.h>
|
||||||
|
#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
|
130
app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/sparc.h
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/* Unicorn Emulator Engine */
|
||||||
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 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
|
730
app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/unicorn.h
Normal file
@ -0,0 +1,730 @@
|
|||||||
|
/* Unicorn Emulator Engine */
|
||||||
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 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 <stdarg.h>
|
||||||
|
|
||||||
|
#if defined(UNICORN_HAS_OSXKERNEL)
|
||||||
|
#include <libkern/libkern.h>
|
||||||
|
#else
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#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
|
1444
app/src/main/cpp/unicorn/lib/arm64-v8a/include/unicorn/x86.h
Normal file
BIN
app/src/main/cpp/unicorn/lib/arm64-v8a/libunicorn.so
Normal file
30
app/src/main/java/gq/cyuubi/lightswitch/MainActivity.java
Normal file
@ -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();
|
||||||
|
}
|
34
app/src/main/res/drawable-v24/ic_launcher_foreground.xml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:aapt="http://schemas.android.com/aapt"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportWidth="108"
|
||||||
|
android:viewportHeight="108">
|
||||||
|
<path
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
||||||
|
android:strokeWidth="1"
|
||||||
|
android:strokeColor="#00000000">
|
||||||
|
<aapt:attr name="android:fillColor">
|
||||||
|
<gradient
|
||||||
|
android:endX="78.5885"
|
||||||
|
android:endY="90.9159"
|
||||||
|
android:startX="48.7653"
|
||||||
|
android:startY="61.0927"
|
||||||
|
android:type="linear">
|
||||||
|
<item
|
||||||
|
android:color="#44000000"
|
||||||
|
android:offset="0.0" />
|
||||||
|
<item
|
||||||
|
android:color="#00000000"
|
||||||
|
android:offset="1.0" />
|
||||||
|
</gradient>
|
||||||
|
</aapt:attr>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:fillType="nonZero"
|
||||||
|
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
||||||
|
android:strokeWidth="1"
|
||||||
|
android:strokeColor="#00000000" />
|
||||||
|
</vector>
|
170
app/src/main/res/drawable/ic_launcher_background.xml
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportWidth="108"
|
||||||
|
android:viewportHeight="108">
|
||||||
|
<path
|
||||||
|
android:fillColor="#008577"
|
||||||
|
android:pathData="M0,0h108v108h-108z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M9,0L9,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,0L19,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M29,0L29,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M39,0L39,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M49,0L49,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M59,0L59,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M69,0L69,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M79,0L79,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M89,0L89,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M99,0L99,108"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,9L108,9"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,19L108,19"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,29L108,29"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,39L108,39"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,49L108,49"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,59L108,59"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,69L108,69"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,79L108,79"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,89L108,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M0,99L108,99"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,29L89,29"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,39L89,39"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,49L89,49"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,59L89,59"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,69L89,69"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M19,79L89,79"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M29,19L29,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M39,19L39,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M49,19L49,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M59,19L59,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M69,19L69,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:pathData="M79,19L79,89"
|
||||||
|
android:strokeWidth="0.8"
|
||||||
|
android:strokeColor="#33FFFFFF" />
|
||||||
|
</vector>
|
19
app/src/main/res/layout/activity_main.xml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".MainActivity">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/sample_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Hello World!"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
5
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@drawable/ic_launcher_background" />
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||||
|
</adaptive-icon>
|
5
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@drawable/ic_launcher_background" />
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||||
|
</adaptive-icon>
|
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 15 KiB |
6
app/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="colorPrimary">#008577</color>
|
||||||
|
<color name="colorPrimaryDark">#00574B</color>
|
||||||
|
<color name="colorAccent">#D81B60</color>
|
||||||
|
</resources>
|
3
app/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<resources>
|
||||||
|
<string name="app_name">Lightswitch</string>
|
||||||
|
</resources>
|
11
app/src/main/res/values/styles.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<resources>
|
||||||
|
|
||||||
|
<!-- Base application theme. -->
|
||||||
|
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
|
<!-- Customize your theme here. -->
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</resources>
|
17
app/src/test/java/gq/cyuubi/lightswitch/ExampleUnitTest.java
Normal file
@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||||
|
*/
|
||||||
|
public class ExampleUnitTest {
|
||||||
|
@Test
|
||||||
|
public void addition_isCorrect() {
|
||||||
|
assertEquals(4, 2 + 2);
|
||||||
|
}
|
||||||
|
}
|
27
build.gradle
Normal file
@ -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
|
||||||
|
}
|
20
gradle.properties
Normal file
@ -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
|
||||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -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
|
172
gradlew
vendored
Normal file
@ -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" "$@"
|
84
gradlew.bat
vendored
Normal file
@ -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
|
1
settings.gradle
Normal file
@ -0,0 +1 @@
|
|||||||
|
include ':app'
|