您好、欢迎来到现金彩票网!
当前位置:手机棋牌游戏平台 > 系统库 >

如何解iOS系统中系统库的dyld缓存

发布时间:2019-07-10 09:49 来源:未知 编辑:admin

  这几天想反汇编看一下iOS 9系统中安全框架的实现代码,于是找到系统中的“/System/Library/Frameworks/Security.framework/”目录,发现里面除了一些配置文件和本地化字符串文件,其它什么都没有,最重要的“Security”二进制文件更是没有踪影。

  查询了许多资料之后才发现,原来从iOS 3.1开始,为了提高系统的性能,所有的系统库文件都被打包保存到了一个很大的缓存文件当中,而为了减少冗余,原始的那些未打包的库二进制文件都被删掉了。

  这个缓存在系统中称作dyld缓存,几乎所有的iOS程序都会用到动态库,而动态库在加载的时候都需要用dyld(位于/usr/lib/dyld)程序进行链接。很多系统库几乎都是每个程序都要用到的,与其在每个程序运行的时候再一个一个将这些动态库都加载进来,还不如先把它们打包好,一次加载进来来的快。

  dyld缓存在系统中位于“/System/Library/Caches/com.apple.dyld/”目录下,文件名是以“dyld_shared_cache_”开头,再加上这个dyld缓存文件所支持的指令集。在这个目录下,有可能有多个dyld缓存文件,对应所支持的不同指令集。比如,在iPad Air 2上,该目录下就存在两个缓存文件:

  没有了系统库的原始二进制版本是不是就没发分析了呢?当然不是,我们还可以从dyld缓存文件中将系统库的原始二进制文件给解出来。目前,有两个工具可以做到这点,一是dyld_decache,还有一个就是jtool。

  使用dyld_decache可以整体提取dyld缓存文件中的所有库原始二进制文件:

  -o用来指定提取出来的文件所要保存的路径,如果不指定,默认就在当前目录下创建一个叫做“library”的目录保存。-f用来说明要提取库的名字,如果要提取的库不止一个,那么每个库的名字前面都要带上-f。如果不指定默认行为就是把缓存文件中所有的库文件全部都提取出来。例如,如果想要解压Security库,可以使用下面的命令:

http://ohmemories.com/xitongku/509.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有