做ARM反汇编练习的环境配置

前言

用IDA6.8调试时,开始连不上虚拟设备…
开始用的Android4.0.3的虚拟机api-19(也有可能是api-14, 记不清了), 在虚拟设备中运行android_server, android_server出现段错误, 或出现退出信号.
后来想想,换了一个Android4.4的虚拟机api19,就可以了。
做ARM反汇编练习,写个ELF可以做实验, 不用SO.

试验环境

IDA6.8
NDK-r10e
android_server(IDA6.8\dbgsrv\自带的)
Android_4.4.2-api19 虚拟设备

makefile

# 要使用NDK中的make
# 将 D:\android-ndk-r10e\prebuilt\windows\bin 加入PATH环境变量, make在这个目录中

#ndk根目录
NDK_ROOT=D:\android-ndk-r10e

#编译器根目录
TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.8/prebuilt/windows

#编译器目录
TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi

#头文件搜索路径
TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/4.8/include-fixed

#SDK根目录
PLATFROM_ROOT=$(NDK_ROOT)/platforms/android-14/arch-arm

#sdk头文件搜索路径
PLATFROM_INCLUDE=$(PLATFROM_ROOT)/usr/include

#sdk库文件搜索路径
PLATFROM_LIB=$(PLATFROM_ROOT)/usr/lib

#文件名称
MODALE_NAME=hw

#删除
RM=del

#编译选项
FLAGS=-I$(TOOLCHAINS_INCLUDE) \
      -I$(PLATFROM_INCLUDE)   \
      -L$(PLATFROM_LIB) \
      -nostdlib \
      -lgcc \
      -Bdynamic \
      -lc

#所有obj文件
OBJS=$(MODALE_NAME).o \
     $(PLATFROM_LIB)/crtbegin_dynamic.o \
     $(PLATFROM_LIB)/crtend_android.o 

#编译器链接
all:
    $(TOOLCHAINS_PREFIX)-gcc -I$(PLATFROM_INCLUDE) -E $(MODALE_NAME).c -o $(MODALE_NAME).I
    $(TOOLCHAINS_PREFIX)-gcc -S -marm $(MODALE_NAME).i -o $(MODALE_NAME).s
    $(TOOLCHAINS_PREFIX)-gcc -c $(MODALE_NAME).s -o $(MODALE_NAME).o
    $(TOOLCHAINS_PREFIX)-gcc $(OBJS) $(FLAGS) -o $(MODALE_NAME)

#删除临时文件
clean:
    $(RM) $(MODALE_NAME).o 
    $(RM) $(MODALE_NAME).i 
    $(RM) $(MODALE_NAME).s
    $(RM) $(MODALE_NAME)

#安装程序到手机
install:
    adb push $(MODALE_NAME) /data/local/tmp
    adb shell chmod 755 /data/local/tmp/$(MODALE_NAME)

#运行程序
run:
    adb shell /data/local/tmp/$(MODALE_NAME)

#打开调试服务器    
debug:
    adb push android_server /data/local/tmp
    adb shell chmod 755 /data/local/tmp/android_server  
    adb forward tcp:23946 tcp:23946
    adb shell /data/local/tmp/android_server
测试程序
#include 
#include 

int fnTest(int iParam1);

int main(int argc, char** argv)
{
    printf("fnTest(%d) = %d\r\n", argc, fnTest(argc));
    return 0;
}

int fnTest(int iParam1)
{
    return (iParam1 + 1000);
}

虚拟设备的参数

我的Eclipse工具条上的虚拟设备管理器图标没了,先得弄出来
做ARM反汇编练习的环境配置_第1张图片
做ARM反汇编练习的环境配置_第2张图片
可用在IDA6.8下调试用的虚拟机配置
做ARM反汇编练习的环境配置_第3张图片
虚拟机启动的慢点不怕,能用.
虚拟机启动后,就可以做实验了.

试验步骤

打开命令行窗口,进入试验目录, 目录中已经有从IDA6.8\dbgsrv\中拷贝来的android_server
make clean
make all
make install
make run ; 测试下测试程序是否能运行.
make debug
打开IDA,选择android调试
点击进程选项,配置调试参数.
做ARM反汇编练习的环境配置_第4张图片
将ELF拖进IDA, 找到要做试验的点,下断点.
点击IDA的调试按钮, 会弹出一堆没找到路径的提示,全部选取消,等IDA跑起来,断在断点处,就可以做实验了.
做ARM反汇编练习的环境配置_第5张图片

你可能感兴趣的:(做ARM反汇编练习的环境配置)