移动app中so文件的执行顺序

根据linker源码,so的执行顺序为:

.preinit_array->-> .init->->.init array->->JNI_Onload->->java_com_XXX; 但so是不会执行 .preinit_array 的, 可以忽略。

还有我们在脱壳的过程中会在一些系统级的.so中下断点比如:fopen,fget,dvmdexfileopen,等等

而.init以及.init_array一般会作为壳的入口地方,那我们索性叫它外壳级的.so文件

这里归纳为三类:

应用级别的:java_com_XXX;

外壳级别的:JNI_Onload,.init,.init_array;

系统级别的:fopen,fget,dvmdexfileopen;

对于在应用级别的和系统级别的就不说了比较简单容易理解。看到上面的.so的加载执行过程我们知道如果说反调试放在外壳级别的.so文件的话,我们就会遇程序在应用级核心函数一下断点就退出的尴尬,事实上多数的反调试会放在这,那么过反调试就必须要在这些地方下断点。

你可能感兴趣的:(移动app中so文件的执行顺序)