背景:https://github.com/kennytm/Miscellaneous/issues/1
请特别关注Planetbeing的评论。但是他们仍然让我感到困惑:
最佳答案
dyld_shared_cache_armvXX在文件系统中未更改。做简单的测试。将文件复制到我的PC,在设备本身上使用iFile检查MD5。重新启动后又做了一次。 iFile中的MD5确实不同,但是PC上的文件的MD5相同。
我怀疑这是由于iOS如何处理此文件。在应用程序启动时,此文件被映射到应用程序的地址空间,因此dyld无需查找,打开和读取每个库,从而减少了应用程序启动时间。由于在应用启动时将ASLR启用,库被放置在虚拟内存空间中的任意偏移处(我不认为OS会更改实际物理内存中的某些内容,因此会将偏移添加到虚拟地址中)。这就是为什么启用ASLR时获得不同的MD5,而禁用ASLR时得到相同的MD5的原因。
关于ios - 为什么dyld_decache segfault的解决方案有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041430/