安卓逆向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

原文地址:https://www.cnblogs.com/fuhua/p/12688953.html