Показано с 1 по 10 из 48
Древовидный режим
-
05.06.2022, 22:02 #11
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 250
- Сказал(а) спасибо
- 69
- Поблагодарили 1812 раз(а) в 395 сообщениях
Re: уни-патч для линукса и для макоси
Посмотрел я в 010editor на сборку 16-1030-macos (первая продуктивная в линейке 8.3.16) - файлы не подписаны ц.п., а вот последняя из этой линейки 16-1973-macos уже подписана ц.п.
Применил я к 16-1030-macos унипатч, а она, дрянь такая, не "взлетает".
В отладчике посмотрел "где грабли лежат?" - системный загрузчик отказывается загрузить вылеченный модуль бэкбейс.dylib.
В коде 1cv8 сразу после загрузки либы бэкбейс идет вызов вирт.метода некоторого объекта либы бэкбейс - поскольку либа не загружена, то происходит обращение к памяти с адресом 0 - это "нарушение защиты памяти", процесс убивается с крахом SEGFAULT:11, в отчете о крахе примерно такое:
Код:Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Signal: Segmentation fault: 11
Этот метод в своих недрах вызывает в системном модуле /usr/lib/dyld функцию dlopen, которая выполняет динамическую загрузку либы в память процесса. Если dlopen почему-либо сбойнула, то надо сразу вызвать функцию dlerror, которая вернет указатель на текстовую строку с разъяснением "чё случилось плохого при выполнении dlopen?".
Я проделал в отладчике этот кульбит (сразу после выхода из dlopen выполнить dlerror) и dlerror вернула мне такое:
Код:dlopen(/opt/1cv8/8.3.16.1030/backbas.dylib, 9): no suitable image found. Did find: /opt/1cv8/8.3.16.1030/backbas.dylib: malformed mach-o image: __TEXT segment maps start of file but is writable /opt/1cv8/8.3.16.1030/backbas.dylib: stat() failed with errno=20
Но тот же самый унипатч работает в изделии 8-2137-macos, это говорит о том, что есть в коде функции dlopen "фича" (читай - "бага"), своеобразный workaround для обхода ситуации "malformed mach-o image...ля-ля-ля-тополя".
При изучении системного модуля /usr/lib/dyld (Mac OS X 10.13.6 (17G65) - т.н. "High Sierra")
вижу строковую константу '@(#)PROGRAM:dyld PROJECT:dyld-551.4'
заглянем на страницу какбы-опен-сорц-огрызка-яблока (не пытайтесь компилировать - не получица)
выбираем свой (dyld-551.4) и смотрим исходник ImageLoaderMachO.cpp:
а в нём
Код:int ImageLoaderMachO::crashIfInvalidCodeSignature() { // Now that segments are mapped in, try reading from first executable segment. // If code signing is enabled the kernel will validate the code signature // when paging in, and kill the process if invalid. ...ля-ля-ля-тополя... }
Если мне удастся понять, какие удачные стечения обстоятельств позволяют хакнутой либе бэкбейс работать и "не жужжать" в изделии 8-2137-macos, то, надеюсь, мне удастся заставить "взлетать" ВСЕ (и которые с ц.п.) сборки для macos после укола унипатчем."кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
4 пользователя(ей) сказали cпасибо:
D@nge1 (12.06.2022), redhat2020 (06.06.2022), root7 (20.01.2024), vovashulga (06.06.2022)
Похожие темы
-
как скачать файл с линукса на виртуальную машину
от dafniya в разделе LINUXОтветов: 1Последнее сообщение: 07.02.2012, 22:43 -
Патч для Warcraft III 1.26 rus
от GHoSt444 в разделе Игры (games)Ответов: 0Последнее сообщение: 30.06.2011, 17:18 -
Патч к AMS Enterprise 2.9
от kryak_er в разделе ПолезностиОтветов: 2Последнее сообщение: 09.06.2009, 22:06 -
Установка Линукса.
от Большой Брат в разделе LINUXОтветов: 18Последнее сообщение: 09.11.2007, 04:26
Социальные закладки