Android .so逆向学习之路-NDK环境搭建和GCC交叉编译配置

**

NDK环境搭建和使用

**
一、Android NDK环境变量配置:
从Android官方下载NDK工具,然后在系统变量中记得添加NDK主目录,不然无法使用ndk-build命令编译应用。
使用NDK手动编译生成.so文件:
1)新建应用名称,如hello。
2)在hello文件夹下新建目录jni
3)在jni目录下新建hello.c,内容如下:

 #include
int main(int argc, char* argv[])
{
printf("hello world");
return 0;
}

4)同样在jni目录下,新建Android.mk和Application.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog    #编译hello.c时需要依赖的共享库(android下的log,此处并没有使用)
 #LOCAL_ARM_MODE := arm
LOCAL_MODULE := hello                                     #编译完成后需要生成的.so名称
LOCAL_SRC_FILES := hello.c                              #编译的原文件名
include $(BUILD_SHARED_LIBRARY)                   #编译结果可以生成共享库和可执行库,NDK都是共享库-Shared

以上是Android.mk中内容,Application.mk内容如下:

APP_ABI := x86 armeabi-v7a                                #希望编译生成的平台

保存好上面三个文件,然后进入到hello文件夹下,执行命令:ndk-build。
命令执行完会在hello文件夹下生成额外的两个文件夹:libs和obj,libs文件夹下的.so文件正是我们所需要的。
Android .so逆向学习之路-NDK环境搭建和GCC交叉编译配置_第1张图片
二、在Windows或者linux下使用NDK的gcc交叉编译配置方法
linux下使用NDK的gcc命令环境变量配置:

$ export NDKROOT=/opt/android/android-ndk-r10
$ export SYSROOT=$NDKROOT/platforms/android-19/arch-arm
$ export GCC=$NDKROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

编译代码命令:

$ $GCC -o main.out main.c --sysroot=$SYSROOT

windows下NDK下的gcc环境变量配置:
如linux上,自定义环境变量SYSROOT=D:\software\android-ndk-r11b\platforms\android-23\arch-arm,并将%NDKROOT%/toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin、加入path变量中,并将上述bin目录下的arm-linux-androideabi-gcc.exe拷贝一份成为gcc.exe。
编译代码命令如下:这里写图片描述
三、出现的错误:
1:error stdio.h no such file or directory
这是因为GCC编译时找不到依赖环境,解决方案就是参见上述的在widows下配置gcc的环境变量。

你可能感兴趣的:(android安全)