新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > arm匯編學(xué)習(xí)(四)

        arm匯編學(xué)習(xí)(四)

        作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
        一、android jni實現(xiàn)

        1.靜態(tài)實現(xiàn)jni:先由Java得到本地方法的聲明,然后再通過JNI實現(xiàn)該聲明方法。
        2.動態(tài)實現(xiàn)jni:先通過JNI重載JNI_OnLoad()實現(xiàn)本地方法,然后直接在Java中調(diào)用本地方法。

        本文引用地址:http://www.104case.com/article/201611/317582.htm

        采用靜態(tài)實現(xiàn)的方式,如果沒有進(jìn)行加密處理,很容易就在IDA導(dǎo)出函數(shù)搜到
        采用動態(tài)實現(xiàn)的方式,還能起到一定的隱藏作用,導(dǎo)出的部分不是就能直接看到j(luò)ava層調(diào)的函數(shù)名,而是綁定的函數(shù)名

        native層:
        在JNI_OnLoad注冊相關(guān)函數(shù)

        JNIEXPORT jstring JNICALL native_hello(JNIEnv *env, jclass clazz){return (*env)->NewStringUTF(env, "hello load jni.");}

        // Java和JNI函數(shù)的綁定表

        static JNINativeMethod method_table[] = {{ "HelloLoad", "()Ljava/lang/String;", (void*)native_hello },//綁定};


        java層:
        // jni中注冊的方法

        public native String HelloLoad();


        二、Android中調(diào)用Arm匯編代碼

        Android.mk文件

        # This file is jni/Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_ARM_MODE := arm# Name of the local moduleLOCAL_MODULE := hello-jni# The files that make up the source codeLOCAL_SRC_FILES := hello-jni.c multiple.sinclude $(BUILD_SHARED_LIBRARY)

        multiple.s符合gnu語法

        @ This file is jni/multiple.s.text.align    2.global    armFunction.type    armFunction, %functionarmFunction:@ Multiply by 10. Input value and return value in r0stmfd    sp!, {fp,ip,lr}mov    r3, r0, asl #3add    r0, r3, r0, asl #1ldmfd    sp!, {fp,ip,lr}bx    lr.size    armFunction, .-armFunction

        直接調(diào)用在c中armFunction(input)調(diào)用



        關(guān)鍵詞: arm匯編學(xué)

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 苗栗市| 宣威市| 正宁县| 密山市| 昆明市| 全椒县| 黄大仙区| 乃东县| 焦作市| 基隆市| 平凉市| 大关县| 永康市| 温宿县| 卢龙县| 绥棱县| 革吉县| 贡觉县| 环江| 丰台区| 海晏县| 云阳县| 买车| 兴安县| 滁州市| 赫章县| 鄂州市| 营口市| 彝良县| 牙克石市| 罗城| 邓州市| 吉木乃县| 安龙县| 桦南县| 揭东县| 丰镇市| 东兰县| 雷波县| 永寿县| 饶河县|