android native程序,android 原生程序 native code 的启动流程分析

原生程序有静态链接和动态链接两种,其中动态链接又分为动态链接程序和动态链接库。

静态链接:需要在gcc编译参数中指定 -Bstatic,在生成可执行程序时会链接crtbegin_static.o 和 ctrend_android.o目标文件。crtbegin_static.o中定义了静态链接程序的启动函数_start,这是程序启动时执行的第一个函数。

动态链接:gcc指定参数 -Bdynamic, 在生成动态链接程序时会链接crtbegin_dynamic.o和ctrend_dynamic.o目标文件,并且动态链接时需要通过--dynamic-linker参数指定程序的“加载器”,默认为"/system/bin/linker"。动态链接程序的启动函数_start位于crtbegin_dynamic.o中。

无论静态还是动态链接,在链接时都会传入一个链接脚本(位于android NDK toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/arm-linux-androideabi/lib/ldscripts中),默认传入的是armelf_linux_eabi.x 脚本,该文件中指出程序入口函数为_start。

动态链接库:

在生成动态链接库时会链接crtbegin_so.o和crtend_so.o目标文件。

系统加载so,在完成装载、映射和重定向以后,就首先执行.init和.init_array段的代码,之后如果存在JNI_OnLoad就调用该函数.我们要对一个so进行分析,需要先看看有没有.init_array section和.init section,so加壳一般会在初始化函数进行脱壳操作。

原生C文件逆向分析:

1.用objdump

2. IDA Pro (没有找到IDA Pro的IOS版本 无法进行试验。。只好只看下教程了。)

原文:http://www.cnblogs.com/CarrieCui/p/5118996.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值