Android Ndk

1. 介绍

Ndk是为了让开发人员,开发更好的程序而提供的,主要是通过编写c c++ 程序
来实现的,而google也提供了jni接口,从而实现在c/c++程序中和java代码进行通讯
以及调用,等.http://blog.csdn.net/li740207611/article/details/50877189 有ida ndk下载安装提示可以看看

2. 编译

2.1 gcc编译

gcc 编译因为需要链接文件,所以写一个makeFile是最好的选择

hello.c 源码 :

#include <stdio.h>
int main(int argc, char* argv[]){
    printf("Hello ARM!\n");
    return 0;
}

makefile 文件 :

#这里填写你自己的ndk路径 window 也一样 下面的把相应的路径换成自己的就可以了
NDK_ROOT=/home/android/tools/android/android-ndk-r8   
TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi
TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/4.4.3/include-fixed

PLATFORM_ROOT=$(NDK_ROOT)/platforms/android-14/arch-arm
PLATFORM_INCLUDE=$(PLATFORM_ROOT)/usr/include
PLATFORM_LIB=$(PLATFORM_ROOT)/usr/lib

MODULE_NAME=hello
RM=rm -rf

FLAGS=-I$(TOOLCHAINS_INCLUDE) \
    -I$(PLATFORM_INCLUDE) \
    -L$(PLATFORM_LIB) \
    -nostdlib \
    -lgcc \
    -Bdynamic \
    -lc

OBJS=$(MODULE_NAME).o \
    $(PLATFORM_LIB)/crtbegin_dynamic.o \  //start 开始动态调用属于原生程序的入口函数 相当于普通c文件的main 函数
    $(PLATFORM_LIB)/crtend_android.o      //end

all:
    $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) -c $(MODULE_NAME).c -o $(MODULE_NAME).o
    $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) $(OBJS) -o $(MODULE_NAME)
clean:
    $(RM) *.o
install:
    adb push $(MODULE_NAME) /data/local/
    adb shell chmod 755 /data/local/$(MODULE_NAME)

编译

make -f makefile #编译成功生成hello可执行文件
make -f makefile install  //这一步一般都会出现 permission 不够的问题,除非你的手机rooted了  并且做了相应的配置不然是不行了
当然你只要知道怎么 生成的过程就可以了,google 建议使用下面的ndk自带的编译,

2.2 ndk编译

需要新建一个android 程序,然后在根目录下面新建 jni文件夹 把hello.c 拷贝进去
然后新建一个Android.mk文件

LOCAL_PATH := $(call my-dir) # my-dir 是一个源码目录的宏定义,这里只要声明就可以了
include $(CLEAR_VARS) #清除掉一些已经定义的宏定义,比如我只是一个子程序 可能和主程序定义的宏有冲突,所以直接清除
LOCAL_ARM_MODE := arm  #指定生成32位的arm指令 
LOCAL_MODULE    := hello #编译后文件的名字
LOCAL_SRC_FILES := hello.c #源文件的名字列表 ,因为我们只有一个所以就写一个
include $(BUILD_EXECUTABLE) #BUILD_EXECUTABLE 表示生成可执行文件,
BUILD_SHARE_LIBRARY 动态库 BUILD_SHARE_LIBRARY 静态库

编译

上面俩步通过之后,如果你的ndk已经设置有环境变量,就直接执行ndk-build 
如果没有就去根目录下面的 然后执行  ndk-build 

Android Ndk_第1张图片

2.3 通过eclipse android 等编译器直接编译

这个我只是知道,但是自己没有尝试,可以自己尝试一下

3. 反编译

1. ida

就直接把第二步生成的可执行文件,拖到ida就可以,
去第一步下载安装

2. ndk

ndk提供的有一个工具,在目录android-ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/
下面有一个 arm-linux-androideabi-objdump 可执行文件
arm-linux-androideabi-objdump -S /yourpath/hello
就会直接在控制台输出反编译的结果.

你可能感兴趣的:(android,android,NDK,逆向)