zoukankan      html  css  js  c++  java
  • 安卓逆向3.使用NDK编译c语言可执行程序

    1)创建.c文件,我本地存放的路径为【C:TestNdkTestNdk.c】,之后给TestNdk.c文件添加以下代码
    #include <stdio.h>
    
    void Sort(int a[], int len)
    {
        int i, j, temp;
        for (i = 0; i < len - 1; i++)
        {
            for (j = len - 1; j > i; j--)
                if (a[j] < a[j - 1])
                {
                    temp = a[j - 1];
                    a[j - 1] = a[j];
                    a[j] = temp;
                }
        }
    }
    int main()
    {
        int nNumbers[10];
        for (int i = 0; i < 10; i++)
        {
            printf("请输入第%2d个数:", i + 1);
            scanf("%d", &nNumbers[i]);
        }
        printf("
    
    您输入的数字为:
    ");
        for (int i = 0; i < 10; i++)
        {
            printf("%d  ", nNumbers[i]);
        }
    
        Sort(nNumbers, 10);
        printf("
    
    排序后的结果为:
    ");
        for (int i = 0; i < 10; i++)
        {
            printf("%d  ", nNumbers[i]);
        }
        printf("
    ");
        getchar();
    }

     

     2)给【C:TestNdk】路径下增加两个文件,分别是Android.mk和Application.mk 

    3)Android.mk文件内容如下
    LOCAL_PATH := $(call my-dir) 
    include $(CLEAR_VARS)             #会清理除了LOCAL_PATH歪的其他LOCAL文件路径
    LOCAL_CFLAGS += -std=c99          #使用c语言c99规范
    LOCAL_CFLAGS += -pie -fPIE        #相当于在源文件中增加宏定义,安卓5.0以上需要添加,否则编译出来无法使用
    LOCAL_LDFLAGS += -pie -fPIE       #相当于在源文件中增加宏定义,安卓5.0以上需要添加,否则编译出来无法使用
    LOCAL_ARM_MODE := arm             #模块指令集
    LOCAL_MODULE    := TestNdk        #模块名称
    LOCAL_SRC_FILES := TestNdk.c      #源文件名
    include $(BUILD_EXECUTABLE)       #编译为可执行文件
    4)Application.mk文件内容如下
    APP_ABI := x86 armeabi-v7a
    5)打开cmd切换到路径C:TestNdk下,并输入命令ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk

    6)上一步执行完成后,在路径C:TestNdk下会多出两个文件夹libs和obj

    7)其中C:TestNdklibsarmeabi文件夹里有个文件名为TestNdk的文件,这就是编译好的elf格式的可执行程序

    8)打开雷电模拟器,执行命令adb push C:TestNdklibsarmeabiTestNdk /data/local/tmp  将刚才编译的文件上传到/data/local/tmp目录下

    9)依次执行如下命令,查看文件是否发送成功
    adb shell
    su
    cd /data/local/tmp
    ls

    10)执行命令chmod 777 TestNdk,修改TestNdk文件权限

    11)执行命令./TestNdk,此时发现CMD窗口显示的所有中文字符都是乱码

    12)上述原因是由于CMD控制台所使用的代码页和TestNdk的代码页不匹配导致的,TestNdk使用的是UTF-8编码,而CMD控制台默认使用的GBK编码!

    13)解决上述问题就是修改CMD窗口的默认代码页为UTF-8编码即可,我们新建一个CMD窗口,输入命令chcp 65001,意思是修改CMD的代码页为65001,65001就是UTF-8编码

    14)重新依次输入命令
    adb shell
    su
    cd /data/local/tmp
    ./TestNdk

  • 相关阅读:
    检验maven的配置是否生效或正确。
    CTO、技术总监和技术经理有啥区别?
    WinScp自动执行脚本
    宝塔--服务器运维面板
    Tomcat中给server.xml加入<Context>元素
    Tomcat之Session名称修改-springboot
    修改tomcat默认的session时间
    Shiro权限框架简单快速入门
    mybatis关联查询
    <mvc:default-servlet-handler/>导致controller失效,报404错误
  • 原文地址:https://www.cnblogs.com/fuhua/p/12688953.html
Copyright © 2011-2022 走看看