美文网首页
动态库共享缓存(dyld shared cache)

动态库共享缓存(dyld shared cache)

作者: coder_feng | 来源:发表于2019-05-03 20:28 被阅读0次

    概要

    从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache),缓存文件路径:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX

    指令架构图显示

    指令架构图说明

    动态缓存图显示

    共用缓存图 动态共享缓存图

    两者相比的好处是,共用的一些信息内容可以存放到共享缓存中,例如一些header文件信息等

    动态库的加载

    在Mac、iOS中,是使用了/usr/lib/dyld程序来加载动态库dyld,有两种叫法

    dyld:dynamic link editor,动态链接编辑器

    dyld:dynamic loader,动态加载器

    从动态库共享缓存抽取动态库

    1.首先在手机获取下来动态库,方式有如下:

    穿越 iPhone firmware. Such as: https://ipsw.me/

    通过越狱设备. 路径: /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64

    2.从源码中获取dsc_extractor二进制命令


    使用dyld源码中的launch-cache/dsc_extractor.cpp,将#if 0前面的代码删除或者注释,把后面#endif 也删除,然后变编译dsc_extractor.cpp

    clang++ -o dsc_extractor dsc_extractor.cpp

    如果没有报错,直接到抽取动态库文件这一步,如果报错请遵循相关错误解决

    错误一:$ ./dsc_extractor dyld_shared_cache_arm64 arm64Error: dyld shared cache code signatureforpage 0 is incorrect.dyld_shared_cache_extract_dylibs_progress() =>-1

    这个错误说明dsc_extractor.bundle Can't work on Xcode10,So the dsc_extractor.bundle is the Xcode9 version.then modify the ./dyld/launch-cache/dsc_extractor.cpp

    #if 0

    #if 1

    //test program

    #include<stdio.h>

    #include<stddef.h>

    @@ -644,7 +644,7 @@ int main(int argc, const char* argv[])

    }

    //void* handle = dlopen("/Volumes/my/src/dyld/build/Debug/dsc_extractor.bundle", RTLD_LAZY);

    //下面这里的Xcode更改成为10版本以下的

    void* handle = dlopen("/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/lib/dsc_extractor.bundle", RTLD_LAZY);

    void* handle =dlopen("dsc_extractor.bundle", RTLD_LAZY);

    if( handle ==NULL) {

    fprintf(stderr,"dsc_extractor.bundle could not be loaded\n");

    return1;

    3.抽取动态库文件

    ./dsc_extractor 动态库共享缓存文件的路径 用于粗放结果目录

    导出图

    参考链接

    dyld源码

    dsc_extractor

    相关文章

      网友评论

          本文标题:动态库共享缓存(dyld shared cache)

          本文链接:https://www.haomeiwen.com/subject/mcmznqtx.html