From 59453aea8b9f135cea8a0d39d1f5934dfdceb629 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 6 May 2020 14:34:07 +0200 Subject: [PATCH 1/4] Android cmake: use common cmake files for deps --- client/android/CMakeLists.txt | 259 ++-------------------------------- 1 file changed, 13 insertions(+), 246 deletions(-) diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index a4e04b8ca..d320db6a1 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -9,6 +9,8 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3 -fvisibility=hidden -w") #缩短路径定义 set(PM3_ROOT ../../) +add_subdirectory(../deps deps) + #添加动态库定义 add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/common/util_posix.c @@ -26,52 +28,6 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/common/iso15693tools.c ${PM3_ROOT}/common/bucketsort.c ${PM3_ROOT}/common/legic_prng.c - ${PM3_ROOT}/common/mbedtls/aes.c - ${PM3_ROOT}/common/mbedtls/base64.c - ${PM3_ROOT}/common/mbedtls/rsa.c - ${PM3_ROOT}/common/mbedtls/rsa_internal.c - ${PM3_ROOT}/common/mbedtls/arc4.c - ${PM3_ROOT}/common/mbedtls/bignum.c - ${PM3_ROOT}/common/mbedtls/asn1parse.c - ${PM3_ROOT}/common/mbedtls/asn1write.c - ${PM3_ROOT}/common/mbedtls/blowfish.c - ${PM3_ROOT}/common/mbedtls/camellia.c - ${PM3_ROOT}/common/mbedtls/certs.c - ${PM3_ROOT}/common/mbedtls/des.c - ${PM3_ROOT}/common/mbedtls/ecdsa.c - ${PM3_ROOT}/common/mbedtls/ecp.c - ${PM3_ROOT}/common/mbedtls/ecp_curves.c - ${PM3_ROOT}/common/mbedtls/entropy.c - ${PM3_ROOT}/common/mbedtls/entropy_poll.c - ${PM3_ROOT}/common/mbedtls/error.c - ${PM3_ROOT}/common/mbedtls/md.c - ${PM3_ROOT}/common/mbedtls/md5.c - ${PM3_ROOT}/common/mbedtls/md_wrap.c - ${PM3_ROOT}/common/mbedtls/sha1.c - ${PM3_ROOT}/common/mbedtls/sha256.c - ${PM3_ROOT}/common/mbedtls/sha512.c - ${PM3_ROOT}/common/mbedtls/timing.c - ${PM3_ROOT}/common/mbedtls/cmac.c - ${PM3_ROOT}/common/mbedtls/oid.c - ${PM3_ROOT}/common/mbedtls/pem.c - ${PM3_ROOT}/common/mbedtls/pk.c - ${PM3_ROOT}/common/mbedtls/pk_wrap.c - ${PM3_ROOT}/common/mbedtls/pkcs5.c - ${PM3_ROOT}/common/mbedtls/pkcs12.c - ${PM3_ROOT}/common/mbedtls/pkparse.c - ${PM3_ROOT}/common/mbedtls/pkwrite.c - ${PM3_ROOT}/common/mbedtls/x509.c - ${PM3_ROOT}/common/mbedtls/x509_crl.c - ${PM3_ROOT}/common/mbedtls/x509_crt.c - ${PM3_ROOT}/common/mbedtls/ctr_drbg.c - ${PM3_ROOT}/common/mbedtls/cipher_wrap.c - ${PM3_ROOT}/common/mbedtls/cipher.c - ${PM3_ROOT}/common/mbedtls/platform_util.c - ${PM3_ROOT}/common//zlib/inflate.c - ${PM3_ROOT}/common/zlib/inffast.c - ${PM3_ROOT}/common/zlib/zutil.c - ${PM3_ROOT}/common/zlib/inftrees.c - ${PM3_ROOT}/common//zlib/adler32.c # client inside ${PM3_ROOT}/client/src/fileutils.c ${PM3_ROOT}/client/src/uart/uart_posix.c @@ -187,75 +143,7 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/client/src/cmdlfpcf7931.c ${PM3_ROOT}/client/src/cmdhfmfhard.c ${PM3_ROOT}/client/src/cmdusart.c - # deps ouside - ${PM3_ROOT}/client/deps/jansson/utf.c - ${PM3_ROOT}/client/deps/jansson/dump.c - ${PM3_ROOT}/client/deps/jansson/path.c - ${PM3_ROOT}/client/deps/jansson/load.c - ${PM3_ROOT}/client/deps/jansson/error.c - ${PM3_ROOT}/client/deps/jansson/value.c - ${PM3_ROOT}/client/deps/jansson/memory.c - ${PM3_ROOT}/client/deps/jansson/pack_unpack.c - ${PM3_ROOT}/client/deps/jansson/hashtable_seed.c - ${PM3_ROOT}/client/deps/jansson/strbuffer.c - ${PM3_ROOT}/client/deps/jansson/strconv.c - ${PM3_ROOT}/client/deps/jansson/hashtable.c - ${PM3_ROOT}/client/deps/jansson/hashtable.c - # cliparser - ${PM3_ROOT}/client/deps/cliparser/cliparser.c - ${PM3_ROOT}/client/deps/cliparser/argtable3.c - # tinycbor - ${PM3_ROOT}/client/deps/tinycbor/cborencoder.c - ${PM3_ROOT}/client/deps/tinycbor/cborencoder_close_container_checked.c - ${PM3_ROOT}/client/deps/tinycbor/cborerrorstrings.c - ${PM3_ROOT}/client/deps/tinycbor/cborparser.c - ${PM3_ROOT}/client/deps/tinycbor/cborparser_dup_string.c - ${PM3_ROOT}/client/deps/tinycbor/cborpretty.c - ${PM3_ROOT}/client/deps/tinycbor/cborpretty_stdio.c - ${PM3_ROOT}/client/deps/tinycbor/cbortojson.c - ${PM3_ROOT}/client/deps/tinycbor/cborvalidation.c - ${PM3_ROOT}/client/deps/tinycbor/open_memstream.c - # reveng - ${PM3_ROOT}/client/deps/reveng/cli.c - ${PM3_ROOT}/client/deps/reveng/bmpbit.c - ${PM3_ROOT}/client/deps/reveng/preset.c - ${PM3_ROOT}/client/deps/reveng/model.c - ${PM3_ROOT}/client/deps/reveng/poly.c - ${PM3_ROOT}/client/deps/reveng/reveng.c - # liblua - ${PM3_ROOT}/client/deps/liblua/lapi.c - ${PM3_ROOT}/client/deps/liblua/ldo.c - ${PM3_ROOT}/client/deps/liblua/lgc.c - ${PM3_ROOT}/client/deps/liblua/ltm.c - ${PM3_ROOT}/client/deps/liblua/lvm.c - ${PM3_ROOT}/client/deps/liblua/lzio.c - ${PM3_ROOT}/client/deps/liblua/lcode.c - ${PM3_ROOT}/client/deps/liblua/llex.c - ${PM3_ROOT}/client/deps/liblua/liolib.c - ${PM3_ROOT}/client/deps/liblua/loslib.c - ${PM3_ROOT}/client/deps/liblua/lopcodes.c - ${PM3_ROOT}/client/deps/liblua/lmem.c - ${PM3_ROOT}/client/deps/liblua/lmathlib.c - ${PM3_ROOT}/client/deps/liblua/ldump.c - ${PM3_ROOT}/client/deps/liblua/ldblib.c - ${PM3_ROOT}/client/deps/liblua/lundump.c - ${PM3_ROOT}/client/deps/liblua/lcorolib.c - ${PM3_ROOT}/client/deps/liblua/lauxlib.c - ${PM3_ROOT}/client/deps/liblua/ltablib.c - ${PM3_ROOT}/client/deps/liblua/linit.c - ${PM3_ROOT}/client/deps/liblua/lstring.c - ${PM3_ROOT}/client/deps/liblua/lctype.c - ${PM3_ROOT}/client/deps/liblua/ltable.c - ${PM3_ROOT}/client/deps/liblua/ldebug.c - ${PM3_ROOT}/client/deps/liblua/lstate.c - ${PM3_ROOT}/client/deps/liblua/lstrlib.c - ${PM3_ROOT}/client/deps/liblua/lfunc.c - ${PM3_ROOT}/client/deps/liblua/lparser.c - ${PM3_ROOT}/client/deps/liblua/lobject.c - ${PM3_ROOT}/client/deps/liblua/loadlib.c - ${PM3_ROOT}/client/deps/liblua/lbaselib.c - ${PM3_ROOT}/client/deps/liblua/lbitlib.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bruteforce.c + # android source jni_tools.c pm3_main.c @@ -264,140 +152,19 @@ add_library(pm3rrg_rdv4 SHARED #添加头文件配置 target_include_directories(pm3rrg_rdv4 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${PM3_ROOT}/ ${PM3_ROOT}/include/ ${PM3_ROOT}/common - ${PM3_ROOT}/common/zlib ${PM3_ROOT}/common_fpga - ${PM3_ROOT}/common/mbedtls - ${PM3_ROOT}/client/src - ${PM3_ROOT}/client/src/fido - ${PM3_ROOT}/client/src/uart - ${PM3_ROOT}/client/deps/liblua - ${PM3_ROOT}/client/deps/reveng - ${PM3_ROOT}/client/deps/jansson - ${PM3_ROOT}/client/deps/tinycbor - ${PM3_ROOT}/client/deps/cliparser - ${PM3_ROOT}/client/deps/hardnested) + ${PM3_ROOT}/client/src) -## CPU-specific code -## These are mostly for x86-based architectures, which is not useful for many Android devices. -add_library(pm3rrg_rdv4_hardnested_nosimd OBJECT - ${PM3_ROOT}/client/deps/hardnested/hardnested_bf_core.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bitarray_core.c) - -target_include_directories(pm3rrg_rdv4_hardnested_nosimd PRIVATE - ${PM3_ROOT}/common - ${PM3_ROOT}/client - ${PM3_ROOT}/include/ - ${PM3_ROOT}/client/deps/hardnested) - -set(X86_CPUS x86 x86_64 i686) - -message(STATUS "CMAKE_SYSTEM_PROCESSOR := ${CMAKE_SYSTEM_PROCESSOR}") - -if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) - message(STATUS "Building optimised x86/x86_64 binaries") - target_compile_options(pm3rrg_rdv4_hardnested_nosimd BEFORE PRIVATE - -mno-mmx -mno-sse2 -mno-avx -mno-avx2 -mno-avx512f) - - set_property(TARGET pm3rrg_rdv4_hardnested_nosimd PROPERTY POSITION_INDEPENDENT_CODE ON) - - ## x86 / MMX - add_library(pm3rrg_rdv4_hardnested_mmx OBJECT - ${PM3_ROOT}/client/deps/hardnested/hardnested_bf_core.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bitarray_core.c) - - target_compile_options(pm3rrg_rdv4_hardnested_mmx BEFORE PRIVATE - -mmmx -mno-sse2 -mno-avx -mno-avx2 -mno-avx512f) - - target_include_directories(pm3rrg_rdv4_hardnested_mmx PRIVATE - ${PM3_ROOT}/common - ${PM3_ROOT}/client - ${PM3_ROOT}/include/ - ${PM3_ROOT}/client/deps/hardnested) - - set_property(TARGET pm3rrg_rdv4_hardnested_mmx PROPERTY POSITION_INDEPENDENT_CODE ON) - - ## x86 / SSE2 - add_library(pm3rrg_rdv4_hardnested_sse2 OBJECT - ${PM3_ROOT}/client/deps/hardnested/hardnested_bf_core.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bitarray_core.c) - - target_compile_options(pm3rrg_rdv4_hardnested_sse2 BEFORE PRIVATE - -mmmx -msse2 -mno-avx -mno-avx2 -mno-avx512f) - - target_include_directories(pm3rrg_rdv4_hardnested_sse2 PRIVATE - ${PM3_ROOT}/common - ${PM3_ROOT}/client - ${PM3_ROOT}/include/ - ${PM3_ROOT}/client/deps/hardnested) - - set_property(TARGET pm3rrg_rdv4_hardnested_sse2 PROPERTY POSITION_INDEPENDENT_CODE ON) - - ## x86 / AVX - add_library(pm3rrg_rdv4_hardnested_avx OBJECT - ${PM3_ROOT}/client/deps/hardnested/hardnested_bf_core.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bitarray_core.c) - - target_compile_options(pm3rrg_rdv4_hardnested_avx BEFORE PRIVATE - -mmmx -msse2 -mavx -mno-avx2 -mno-avx512f) - - target_include_directories(pm3rrg_rdv4_hardnested_avx PRIVATE - ${PM3_ROOT}/common - ${PM3_ROOT}/client - ${PM3_ROOT}/include/ - ${PM3_ROOT}/client/deps/hardnested) - - set_property(TARGET pm3rrg_rdv4_hardnested_avx PROPERTY POSITION_INDEPENDENT_CODE ON) - - ## x86 / AVX2 - add_library(pm3rrg_rdv4_hardnested_avx2 OBJECT - ${PM3_ROOT}/client/deps/hardnested/hardnested_bf_core.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bitarray_core.c) - - target_compile_options(pm3rrg_rdv4_hardnested_avx2 BEFORE PRIVATE - -mmmx -msse2 -mavx -mavx2 -mno-avx512f) - - target_include_directories(pm3rrg_rdv4_hardnested_avx2 PRIVATE - ${PM3_ROOT}/common - ${PM3_ROOT}/client - ${PM3_ROOT}/include/ - ${PM3_ROOT}/client/deps/hardnested) - - set_property(TARGET pm3rrg_rdv4_hardnested_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON) - - ## x86 / AVX512 - add_library(pm3rrg_rdv4_hardnested_avx512 OBJECT - ${PM3_ROOT}/client/deps/hardnested/hardnested_bf_core.c - ${PM3_ROOT}/client/deps/hardnested/hardnested_bitarray_core.c) - - target_compile_options(pm3rrg_rdv4_hardnested_avx512 BEFORE PRIVATE - -mmmx -msse2 -mavx -mavx2 -mavx512f) - - target_include_directories(pm3rrg_rdv4_hardnested_avx512 PRIVATE - ${PM3_ROOT}/common - ${PM3_ROOT}/client - ${PM3_ROOT}/include/ - ${PM3_ROOT}/client/deps/hardnested) - - set_property(TARGET pm3rrg_rdv4_hardnested_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON) - - set(SIMD_TARGETS - $ - $ - $ - $ - $) -else () - message(STATUS "Not building optimised targets") - set(SIMD_TARGETS) -endif () - -#定义为静态库,被最终的pm3库依赖! -add_library(pm3rrg_rdv4_hardnested STATIC - $ - ${SIMD_TARGETS}) +find_library(pm3rrg_rdv4_cliparser REQUIRED) +find_library(pm3rrg_rdv4_jansson REQUIRED) +find_library(pm3rrg_rdv4_tinycbor REQUIRED) +find_library(pm3rrg_rdv4_lua REQUIRED) +find_library(pm3rrg_rdv4_mbedtls REQUIRED) +find_library(pm3rrg_rdv4_reveng REQUIRED) +find_library(pm3rrg_rdv4_z REQUIRED) +find_library(pm3rrg_rdv4_hardnested REQUIRED) +target_link_libraries(pm3rrg_rdv4 pm3rrg_rdv4_hardnested pm3rrg_rdv4_mbedtls pm3rrg_rdv4_cliparser pm3rrg_rdv4_jansson pm3rrg_rdv4_lua pm3rrg_rdv4_tinycbor pm3rrg_rdv4_amiibo pm3rrg_rdv4_reveng pm3rrg_rdv4_z android log) #添加动态库链接! -target_link_libraries(pm3rrg_rdv4 pm3rrg_rdv4_hardnested android log z) \ No newline at end of file From e8999f3318ee8c8234d0dae73d0f15fd7a4b8e62 Mon Sep 17 00:00:00 2001 From: dxl <64101226@qq.com> Date: Thu, 7 May 2020 16:57:15 +0800 Subject: [PATCH 2/4] Translation some comments from Chinese to English. --- client/android/CMakeLists.txt | 19 ++++++++------- client/android/jni_tools.c | 41 +++++++++----------------------- client/android/jni_tools.h | 14 +++++------ client/android/pm3_main.c | 44 ++++++++++++++++------------------- 4 files changed, 48 insertions(+), 70 deletions(-) diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index d320db6a1..1e03d1658 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -1,17 +1,20 @@ -#需要的最cmake版本 +# version cmake_minimum_required(VERSION 3.4.1) -#添加预编译宏定义参数,此次的作用是开启配置文件的引入! +# We are build on android platform, so we need add def "ANDROID" +# NDK version for SDK 19 doesn't implement the whole C++11 standard in the STL. +# see: https://stackoverflow.com/questions/44736135/ndk-clang-error-undefined-reference-to-localeconv +# so we need add def getlocaledecpoint()='.' add_definitions(-DANDROID -D"getlocaledecpoint()='.'" -DZ_SOLO) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3 -fvisibility=hidden -w") -#缩短路径定义 +# Root path into client set(PM3_ROOT ../../) add_subdirectory(../deps deps) -#添加动态库定义 +# client resources add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/common/util_posix.c ${PM3_ROOT}/common/crapto1/crapto1.c @@ -143,13 +146,12 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/client/src/cmdlfpcf7931.c ${PM3_ROOT}/client/src/cmdhfmfhard.c ${PM3_ROOT}/client/src/cmdusart.c - - # android source + # android resources jni_tools.c pm3_main.c ) -#添加头文件配置 +# includes target_include_directories(pm3rrg_rdv4 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PM3_ROOT}/include/ @@ -166,5 +168,4 @@ find_library(pm3rrg_rdv4_reveng REQUIRED) find_library(pm3rrg_rdv4_z REQUIRED) find_library(pm3rrg_rdv4_hardnested REQUIRED) -target_link_libraries(pm3rrg_rdv4 pm3rrg_rdv4_hardnested pm3rrg_rdv4_mbedtls pm3rrg_rdv4_cliparser pm3rrg_rdv4_jansson pm3rrg_rdv4_lua pm3rrg_rdv4_tinycbor pm3rrg_rdv4_amiibo pm3rrg_rdv4_reveng pm3rrg_rdv4_z android log) -#添加动态库链接! +target_link_libraries(pm3rrg_rdv4 pm3rrg_rdv4_hardnested pm3rrg_rdv4_mbedtls pm3rrg_rdv4_cliparser pm3rrg_rdv4_jansson pm3rrg_rdv4_lua pm3rrg_rdv4_tinycbor pm3rrg_rdv4_amiibo pm3rrg_rdv4_reveng pm3rrg_rdv4_z android log) \ No newline at end of file diff --git a/client/android/jni_tools.c b/client/android/jni_tools.c index 1a5fc9592..6e12da2be 100644 --- a/client/android/jni_tools.c +++ b/client/android/jni_tools.c @@ -7,10 +7,10 @@ #include #include "stdbool.h" -//当前线程是否添加的标志位 +// native thread attach label static bool g_IsAttach; -//TODO 环境变量获取函数 +// get current env for jvm JNIEnv *getJniEnv() { JNIEnv *currentThreadEnv; g_IsAttach = false; @@ -32,66 +32,47 @@ JNIEnv *getJniEnv() { } } -//解绑线程env -void deatchThread() { +// detach native thread from jvm +void detachThread() { if (g_IsAttach) { - LOGD("线程解绑成功!"); (*g_JavaVM)->DetachCurrentThread(g_JavaVM); } } -//TODO 命令行解析 +// cmd arg parse CMD *parse_command_line(const char *commandStr) { - //一个指针,指向传进来的命令字符串(const修饰的,我们需要复刻一份!) CMD *cmd = (CMD *) malloc(sizeof(CMD)); if (!cmd) { - LOGD("申请空间失败!"); return NULL; } - //拷贝字符串到堆空间! + // copy the source to the heap char *pTmp = strdup(commandStr); - LOGD("拷贝参数字符串到临时堆!"); - //返回的结果!先初始化为20个空间 + // new memory size is default 20 for char ** int size = 20; cmd->cmd = (char **) malloc(size * sizeof(char **)); - if (cmd->cmd) { - LOGD("申请参数空间成功!"); - } else { - LOGD("申请空间失败!"); - } - //进行截取 + if (!cmd->cmd) return NULL; + // parse char *pStr = strtok(pTmp, " "); - LOGD("第0次截取完成: %s", pStr); - //给结果数组进行下标为0的第一次初始化 cmd->cmd[0] = pStr; - //局部变量用于储存解析到的命令个数,下标移动为一 int count = 1; - //需要截取命令参数,以空格为限定符 for (; pStr != NULL; ++count) { - //如果容量不够,则扩容! + // Capacity expansion if (count == (size - 1)) { size += 20; cmd->cmd = (char **) realloc(cmd->cmd, size * sizeof(char **)); - LOGD("超过初始容量,自动扩容!"); } pStr = strtok(NULL, " "); if (pStr) { cmd->cmd[count] = pStr; - LOGD("第%d次截取完成: %s", count, pStr); } } cmd->len = (count - 1); - LOGD("解析函数执行完成!"); return cmd; } -//内存释放 +// cmd arg struct free void free_command_line(CMD *cmd) { - //二级指针需要逐层释放! - LOGD("释放命令行字符串二级引用!"); free(cmd->cmd[0]); - LOGD("释放命令行一级引用!"); free(cmd->cmd); - LOGD("释放结构体内存"); free(cmd); } diff --git a/client/android/jni_tools.h b/client/android/jni_tools.h index 3d76184b9..8e900374f 100644 --- a/client/android/jni_tools.h +++ b/client/android/jni_tools.h @@ -10,31 +10,31 @@ #include //JNI LOG -#define TAG "DXL BlUESPP_PN532" +#define TAG "PM3" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,TAG,__VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__) -//全局的环境变量定义 +// a global jvm instance JavaVM *g_JavaVM; -//线程环境指针获取函数 +// get current env for jvm JNIEnv *getJniEnv(); -//子线程释放函数,必须是native层创建的线程才可以调用 -void deatchThread(); +// detach native thread from jvm, must native thread can detach! +void detachThread(); typedef struct { char **cmd; int len; } CMD; -//命令行解析函数 +// cmd arg parse CMD *parse_command_line(const char *commandStr); -//解析结果释放函数! +// cmd arg struct free void free_command_line(CMD *); #endif //DXL_TOOLS_H diff --git a/client/android/pm3_main.c b/client/android/pm3_main.c index 87c6bbd44..3039bbf8e 100644 --- a/client/android/pm3_main.c +++ b/client/android/pm3_main.c @@ -79,7 +79,7 @@ static bool open() { } /* - * 发送一条命令等待执行! + * Transfers to the command buffer and waits for a new command to be executed * */ jint sendCMD(JNIEnv *env, jobject instance, jstring cmd_) { //may be pm3 not running. @@ -93,19 +93,9 @@ jint sendCMD(JNIEnv *env, jobject instance, jstring cmd_) { CloseProxmark(); } } - //无论如何,新的命令的输入了,就要换个行! + // display on new line PrintAndLogEx(NORMAL, "\n"); - char *cmd = (char *)((*env)->GetStringUTFChars(env, cmd_, 0)); - // Many parts of the PM3 client will assume that they can read any write from pwd. So we set - // pwd to whatever the PM3 "executable directory" is, to get consistent behaviour. - /*int ret = chdir(get_my_executable_directory()); - if (ret == -1) { - LOGW("Couldn't chdir(get_my_executable_directory()), errno=%s", strerror(errno)); - } - char pwd[1024]; - memset((void *) &pwd, 0, sizeof(pwd)); - getcwd((char *) &pwd, sizeof(pwd)); - LOGI("pwd = %s", pwd);*/ + char *cmd = (char *) ((*env)->GetStringUTFChars(env, cmd_, 0)); int ret = CommandReceived(cmd); if (ret == 99) { // exit / quit @@ -117,14 +107,14 @@ jint sendCMD(JNIEnv *env, jobject instance, jstring cmd_) { } /* - * 是否在执行命令 + * Is client running! * */ jboolean isExecuting(JNIEnv *env, jobject instance) { - return (jboolean)((jboolean) conn.run); + return (jboolean) ((jboolean) conn.run); } /* - * 进行设备链接验证! + * test hw and hw and client. * */ jboolean testPm3(JNIEnv *env, jobject instance) { bool ret1 = open(); @@ -133,13 +123,19 @@ jboolean testPm3(JNIEnv *env, jobject instance) { return false; } bool ret2 = TestProxmark() == PM3_SUCCESS; - return (jboolean)(ret1 && ret2); + return (jboolean) (ret1 && ret2); } +/* + * stop pm3 client + * */ void stopPm3(JNIEnv *env, jobject instance) { CloseProxmark(); } +/* + * native function map to jvm + * */ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *jniEnv = NULL; if ((*vm)->GetEnv(vm, (void **) &jniEnv, JNI_VERSION_1_4) != JNI_OK) { @@ -152,21 +148,21 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { } jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4"); JNINativeMethod methods[] = { - {"startExecute", "(Ljava/lang/String;)I", (void *) sendCMD}, - {"stopExecute", "()V", (void *) stopPm3}, - {"isExecuting", "()Z", (void *) isExecuting} + {"startExecute", "(Ljava/lang/String;)I", (void *) sendCMD}, + {"stopExecute", "()V", (void *) stopPm3}, + {"isExecuting", "()Z", (void *) isExecuting} }; JNINativeMethod methods1[] = { - {"testPm3", "()Z", (void *) testPm3}, - {"closePm3", "()V", stopPm3} + {"testPm3", "()Z", (void *) testPm3}, + {"closePm3", "()V", stopPm3} }; if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) != - JNI_OK) { + JNI_OK) { return -1; } if ((*jniEnv)->RegisterNatives(jniEnv, clz_test, methods1, sizeof(methods1) / sizeof(methods1[0])) != - JNI_OK) { + JNI_OK) { return -1; } (*jniEnv)->DeleteLocalRef(jniEnv, clazz); From 00b5841597742ec3bb902d9d927e962d4b2ba124 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 7 May 2020 12:13:52 +0200 Subject: [PATCH 3/4] cmake android: add backslashes for host compatibility --- client/android/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index 1e03d1658..fc7c759bb 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.4.1) # NDK version for SDK 19 doesn't implement the whole C++11 standard in the STL. # see: https://stackoverflow.com/questions/44736135/ndk-clang-error-undefined-reference-to-localeconv # so we need add def getlocaledecpoint()='.' -add_definitions(-DANDROID -D"getlocaledecpoint()='.'" -DZ_SOLO) +add_definitions(-DANDROID -D"getlocaledecpoint\(\)='.'" -DZ_SOLO) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3 -fvisibility=hidden -w") From b34851d2812fd5712273ae6ca5e2a25ebb6d8cd8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 7 May 2020 12:19:46 +0200 Subject: [PATCH 4/4] make style --- client/android/pm3_main.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/client/android/pm3_main.c b/client/android/pm3_main.c index 3039bbf8e..6855856ab 100644 --- a/client/android/pm3_main.c +++ b/client/android/pm3_main.c @@ -95,7 +95,7 @@ jint sendCMD(JNIEnv *env, jobject instance, jstring cmd_) { } // display on new line PrintAndLogEx(NORMAL, "\n"); - char *cmd = (char *) ((*env)->GetStringUTFChars(env, cmd_, 0)); + char *cmd = (char *)((*env)->GetStringUTFChars(env, cmd_, 0)); int ret = CommandReceived(cmd); if (ret == 99) { // exit / quit @@ -110,7 +110,7 @@ jint sendCMD(JNIEnv *env, jobject instance, jstring cmd_) { * Is client running! * */ jboolean isExecuting(JNIEnv *env, jobject instance) { - return (jboolean) ((jboolean) conn.run); + return (jboolean)((jboolean) conn.run); } /* @@ -123,7 +123,7 @@ jboolean testPm3(JNIEnv *env, jobject instance) { return false; } bool ret2 = TestProxmark() == PM3_SUCCESS; - return (jboolean) (ret1 && ret2); + return (jboolean)(ret1 && ret2); } /* @@ -148,21 +148,21 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { } jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4"); JNINativeMethod methods[] = { - {"startExecute", "(Ljava/lang/String;)I", (void *) sendCMD}, - {"stopExecute", "()V", (void *) stopPm3}, - {"isExecuting", "()Z", (void *) isExecuting} + {"startExecute", "(Ljava/lang/String;)I", (void *) sendCMD}, + {"stopExecute", "()V", (void *) stopPm3}, + {"isExecuting", "()Z", (void *) isExecuting} }; JNINativeMethod methods1[] = { - {"testPm3", "()Z", (void *) testPm3}, - {"closePm3", "()V", stopPm3} + {"testPm3", "()Z", (void *) testPm3}, + {"closePm3", "()V", stopPm3} }; if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) != - JNI_OK) { + JNI_OK) { return -1; } if ((*jniEnv)->RegisterNatives(jniEnv, clz_test, methods1, sizeof(methods1) / sizeof(methods1[0])) != - JNI_OK) { + JNI_OK) { return -1; } (*jniEnv)->DeleteLocalRef(jniEnv, clazz);