ios - 为什么dyld_decache segfault的解决方案有效?

标签 ios caching segmentation-fault jailbreak dyld

背景:https://github.com/kennytm/Miscellaneous/issues/1

请特别关注Planetbeing的评论。但是他们仍然让我感到困惑:

  • “当在iOS上运行的启用了ASLR的进程读取时,/ System / Library / Caches / com.apple.dyld / dyld_shared_cache_armv7由于应用了ASLR而出现了更改,尽管实际上并未在文件系统上进行更改。根据我的测试,/ System / Library / Caches / com.apple.dyld / dyld_shared_cache_armvXX的md5有时会更改,因此似乎该文件在文件系统上已更改。我有误会吗?
  • 如果在文件系统上未更改此文件,并且没有PIC的程序(例如https://gist.github.com/theiostream/4366719)将其复制到另一个位置,则两个文件在文件系统上应相同。当我将它们保存到MAC中时,为什么不能对原始文件但对新复制的文件进行缓存?
  • 最佳答案

    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/

    相关文章:

    ios - URLSession缓存数据

    javascript - IOS 10.3.1 Chrome 浏览器 CORS 失败

    iOS 11。KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED 是什么意思?

    caching - ElasticSearch刷新对缓存的影响

    java - LocalCache Guava ,优化更高的吞吐量

    c - 为什么这个递归代码会抛出段错误?

    ios - 如何将关联对象与枚举一起使用?

    linux - memcached 何时删除项目?

    c++ - 缺少 XML 文件时 tinyxml2 上的段错误

    c - 在 OS X Mavericks 上使用 -O3 编译时出现 Getopt 代码段错误