一、使用AndroidStudio搭建NDK环境二、使用IDAPro调试原生程序.PDF
一、使用Android Studio 搭建NDK 环境
在Android Studio 2.2 以前的版本需要手动配置NDK 环境,项目中需要手动添加
和修改,显得略微繁琐。而在Android Studio 2.2 以后,在创建项目时,可以勾选
Include C++ support 可选框,剩下的由程序自动构建项目,坐享其成。
在搭建NDK 环境,本文不再赘述,可以参考下边两篇知乎的文章:
·《Android Studio 第一个NDK 例子》
/p/3e9f3055d7a6
·《Android Studio 2.2 更方便地创建JNI 项目-CMake》
/p/4eefb16d83e3
二、使用IDA Pro 调试原生程序
源代码请转至文章最后一部分 (第五部分)
1.首先创建一个Android 原生程序,这需要在一个Android 工程的基础上创建,
(可以用Android Studio 创建一个 Empty Activity )。如图,我在一个名为
HelloWorld 的工程的根目录下,创建一个j ni 文件夹,里边有两个文件,而libs
是由后边ndk-build 命令生成的:
·Android.mk (源码参见最后)
ndk-build 使用Android.mk 和Application.mk 作为脚本文件,其中,
Application.mk 文件是可选的。Android.mk 文件是工程的编译脚本,告知编译
系统关于源文件的一些信息,描述了编译原生程序所需的编译选项、头文件、
源文件等等。Application.mk 文件用来描述原生程序本身使用到的一些特性,如
原生程序支持的ARM 硬件指令集、STL 支持等。
·whileCycle.c (源码参见最后)
包含两个子函数的C 程序,内容是while 循环结构语句。用于生成Android 原生
可执行程序。
2.进入命令行,cd 进入j ni 目录,输入
ndk-build
在libs 里边生成适应于不同平台的原生可执行程序
3.此处我采用夜神安卓模拟器,将 armeabi 文件夹中的 whileCycle 拷贝入
/mnt/shared/Other ,还有IDA Pro 中的android_server 和android_server_nonpie 也
拷贝入同一目录下,其中 nonpie 版本用于 Android 4.4 及以下,pie 版本用于
Android 5.0 (L)及以上的版本。
4.在命令行下执行以下命令
adb shell
加上可执行权限
chmod 755 /mnt/shared/Other/whileCycle
chmod 755 /mnt/shared/Other/android_server
chmod 755 /mnt/shared/Other/android_server_nonpie
根据Android 版本的情况启动android_server ,此处启动的是nonpie 版本
/mnt/shared/Other/android_server_nonpie
由图可知,程序提示调试服务器已经启动,并且监听了23946 端口。
打开另一个命令窗口,执行以下命令进行端口转发
adb forward tcp:23946 tcp:23946
5.执行后,启动IDA Pro ,点击菜单栏 “Debugger->Run->Remote
ArmLinux/Android debugger ”,打开调试程序对话框。根据可执行文件的路径,
在Application 栏和Directory 栏输入相应的信息,在Hostname 栏输入localhost
或者,Port 自动选择为23946,如下图所示。
6.设置完成后,点击OK ,则进入调试界面
三、使用IDA Pro 调试Android 原生动态链接库
1.编写 Android 程序javac2.apk (源码请参见第五部分),要求其实现如下功能:
点击 “Chang