2013-09-27 4 views
1

Предпосылки: https://github.com/kennytm/Miscellaneous/issues/1Почему работает решение dyld_decache segfault?

Обратите особое внимание на комментарий планета. Но они по-прежнему смущают меня:

  1. «Когда прочитан процессами, запущенные на прошивке, позволившей ASLR, /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7 появляется изменился в связи с ASLR применяется, несмотря на то, что на файловой системе фактически не изменено ». Согласно моим тестам, md5 из /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armvXX меняется время от времени, поэтому кажется, что этот файл ИЗМЕНЕН в файловой системе. Я что-то не понимаю?
  2. Если этот файл не изменен в файловой системе, а программа (например, https://gist.github.com/theiostream/4366719) без PIC копирует его в другое место, оба файла должны быть одинаковыми в файловой системе. Когда я сканирую их на свой MAC-адрес, почему исходный файл, кроме нового скопированного файла, не может быть отменен?
+0

Как узнать, как файл меняется на диск? Вы постоянно запускаете команду 'md5/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7' на терминале? И, похоже, копирование кеша, а затем перенос его на ваш Mac является одной из рекомендуемых стратегий ... есть ли проблема с этим? Или вы просто пытаетесь понять, почему ** это необходимо? – Nate

+0

@Nate Сначала я заметил изменение md5 с помощью iFile, но я написал простой инструмент командной строки для вычисления md5 указанного файла. Результат: [link] (https://ghostbin.com/paste/st2sg). Обратите внимание на последние 3 строки, md5 изменился, но я не знаю, почему. И есть проблема с копированием кеша и записью его на мой MAC, см. Мой второй вопрос :) Спасибо! – snakeninny

ответ

0

dyld_shared_cache_armvXX не изменяется в файловой системе. Простой тест. Скопировал файл на мой компьютер, проверил MD5 на iFile на самом устройстве. После перезагрузки это снова. MD5 в iFile действительно отличался, но MD5 файлов на моем компьютере был таким же.

Я прошу, это связано с тем, как этот файл обрабатывается iOS. При запуске приложения этот файл отображается в адресное пространство приложения, поэтому dyld не нужно искать, открывать и читать каждую библиотеку, тем самым сокращая время запуска приложения. Поскольку ASLR включен, когда приложения запускают библиотеки, помещаются случайным смещениям в виртуальном пространстве памяти (я не думаю, что ОС что-то меняет в реальной физической памяти, смещения добавляются к виртуальным адресам). Вот почему вы получаете разные MD5, когда включена ASLR, и тот же MD5, когда ASLR отключен.

+0

«MD5 в iFile действительно отличался, но MD5 файлов на моем компьютере был таким же», разве это не означает, что кеш ** IS ** изменяется в iOS-файловой системе? И, конечно, это не изменится, если оно не находится под /System/Library/Caches/com.apple.dyld/ (потому что это не исполняемый файл?). – snakeninny

+0

Я точно знаю, о чем вы говорите, но мой вопрос в том, что если dyld_shared_cache_armvXX не может быть зашифрован, когда выскочил из своего исходного пути из-за ASLR, кто отвечает за segfault? SSHD? Но если он скопирован в другое место с программой no-pic, scp хорошо работает с dyld_decache, поэтому я думаю, что это не ошибка sshd. Я предполагаю, что /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armvXX меняется во время scping, но я не уверен. – snakeninny

+0

@snakeninny, посмотрите дату последнего изменения dyld_shared_cache_armvXX - файл не изменяется. Прошел еще один тест. Скопировал dyld_shared_cache_armvXX в другое место в файловой системе iOS, проверил MD5 с iFile и сравнил с MD5 того же файла на моем ПК. То же самое. dyld_shared_cache_armvXX - очень специальный файл, поскольку ASLR изменяет его содержимое, когда он отображается в адресное пространство приложения при запуске. Файл только APPEARS должен быть изменен, потому что изменения происходят только в памяти, не затрагивая оригинальный файл на диске. – creker