so加载流程(简单总结)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37344790/article/details/78658115

作为一个android逆向刚开始的菜鸟,不自量力来总结一下so的加载流程,由于暂时水平有限,这里借助几篇网上大佬们的博客(侵删),自己简单总结自己所学,算作笔记,还会慢慢加深自己的理解,持续更新。

  1. 先来简单总结一下java层中so的加载流程,动态链接库(SO)加载原理
    加载so,主要分为两个步骤find和load,这篇文章里讲述了加载so的大概流程和如何找到so位置。
    我们需要加载的so文件位置,主要来自两个方面,一个是来自classLoader构造函数传进的libraryPath,一个是来自java.library.path这个环境变量的值。

    环境变量的值大部分情况下是在/vendor/lib , /system/lib 下

    libraryPath 主要来自两个方向:一个是 data 目录下 app-lib 中安装包目录,比如:/data/app-lib/com.test-1,另一个方向就是来自于 apkpath+”!/lib/”+primaryCpuAbi 的地址了,比如:/data/app/com.test-1.apk!/lib/arm64-v8a

  2. native层下so的加载,android so加载
    整篇文章以总结为主,短小精悍,虽然没有讲过多的细节,但是对于android逆向常用或者入门来讲,应用是够用了,也很希望能多多看到这样的文章,暂时水平有限,待学习的深入总有一天会回过头来从源码的角度,再分析so的加载流程。

这里写图片描述
这里借用这篇文章的一幅大概流程图,以作简单总结。
我们在ida动态调试时,常常需要将断点下在init,initArray或者JNI_OnLoad函数下,通过这篇文章,我们可以通过在linker下下断点的方式,到达我们的init,initArray,JNI_OnLoad函数。
具体方式可参考以下文章:JNI_OnLoad与init_array下断方法整理

讲了半天,还是在引用别人的博客,没办法,这些文章写的实在好,由衷佩服这些大佬,嗯,继续努力吧

猜你喜欢

转载自blog.csdn.net/m0_37344790/article/details/78658115