Jump to content

предварительная ссылка

(Перенаправлено с Предварительной привязки )

В технике вычислительной предварительная привязка , также называемая предварительным связыванием , — это метод оптимизации времени загрузки приложения путем разрешения символов библиотеки перед запуском.

Большинство компьютерных программ состоят из кода, для выполнения которого требуются внешние общие библиотеки . Эти библиотеки обычно интегрируются с программой во время выполнения с помощью загрузчика в процессе, называемом динамическим связыванием .

Хотя динамическое связывание имеет преимущества в размере кода и управлении, есть и недостатки. Каждый раз при запуске программы загрузчику необходимо разрешить (найти) соответствующие библиотеки. Поскольку библиотеки перемещаются в памяти, разрешение приводит к снижению производительности. Этот штраф увеличивается с каждой дополнительной библиотекой, требующей разрешения.

Предварительное связывание снижает этот штраф за счет предварительного разрешения библиотек. После этого разрешение происходит только в том случае, если библиотеки изменились с момента предварительного связывания, например, после обновления.

Mac OS хранит исполняемые файлы в Mach-O формате файлов .

Mac OS X выполняет предварительную привязку на этапе «Оптимизации» установки системного программного обеспечения или определенных приложений.

Предварительная привязка несколько раз менялась в серии Mac OS X. До версии 10.2 предварительная привязка происходила только во время процедуры установки (вышеупомянутый этап «Оптимизация»). С 10.2 по 10.3 ОС проверяла наличие предварительной привязки приложений во время запуска, и при первом запуске приложения оно было предварительно привязано, что ускоряло последующие запуски. Это также можно было запустить вручную, что и происходило в некоторых установках на уровне ОС. В версии 10.4 предварительно привязывались только библиотеки ОС. В версии 10.5 и более поздних версиях Apple заменила предварительную привязку механизмом dyld общего кэша . [1] что обеспечило лучшую производительность ОС.

В Linux предварительное связывание осуществляется с помощью программы prelink , — бесплатной программы написанной Якубом Елинеком из Red Hat для ELF двоичных файлов .

Результаты производительности были неоднозначными [ нужны разъяснения ] , но, похоже, это помогает системам с большим количеством библиотек, таким как KDE . [2]

[ редактировать ]

При запуске с опцией «-R» prelink будет случайным образом выбирать базу адресов, в которую загружаются библиотеки. Этот выбор усложняет атаку с возвратом в libc , поскольку адреса уникальны для этой системы. Причина, по которой prelink делает это, заключается в том, что средства ядра, обеспечивающие рандомизацию расположения адресного пространства (ASLR) для библиотек, не могут использоваться вместе с prelink, не нарушая цели предварительной ссылки и не заставляя динамический компоновщик выполнять перемещения во время загрузки программы.

Как уже говорилось, рандомизация адресов библиотек предварительной ссылки и каждого процесса не может использоваться совместно. Чтобы избежать полного удаления этого улучшения безопасности, prelink предоставляет собственную рандомизацию; однако это не помогает при общей утечке информации, вызванной предварительной ссылкой. Злоумышленники, имеющие возможность читать определенные произвольные файлы в целевой системе, могут обнаружить, где в привилегированных демонах загружаются библиотеки; часто достаточно библиотеки libc, поскольку это наиболее распространенная библиотека, используемая в атаках типа «возврат в libc» .

Прочитав файл общей библиотеки, такой как libc, злоумышленник с локальным доступом может обнаружить адрес загрузки libc в любом другом приложении в системе. Поскольку большинство программ ссылаются на libc, файл библиотеки libc всегда должен быть доступен для чтения; любой злоумышленник с локальным доступом может собрать информацию об адресном пространстве процессов с более высокими привилегиями. Локальный доступ обычно может быть получен с помощью учетных записей оболочки или учетных записей веб-сервера, которые позволяют использовать сценарии CGI, которые могут читать и выводить любой файл в системе. [ нужна ссылка ] Уязвимости обхода каталогов могут быть использованы злоумышленниками без учетных записей, если доступны уязвимости сценариев CGI.

Поскольку предварительная ссылка часто запускается периодически, обычно каждые две недели, адрес любой библиотеки может меняться со временем. prelink часто используется в инкрементальном режиме, в котором уже предварительно связанные библиотеки не изменяются без крайней необходимости, поэтому библиотека не может изменить свой базовый адрес при повторном запуске prelink. Это дает любому производному адресу период полураспада, равный периоду, в течение которого выполняется предварительное соединение. Также обратите внимание, что если установлена ​​новая версия библиотеки, адреса меняются.

Якуб Елинек отмечает, что позиционно-независимые исполняемые файлы (PIE) игнорируют предварительное связывание в Red Hat Enterprise Linux и Fedora , и рекомендует сетевых и SUID- создавать PIE для программ, чтобы обеспечить более безопасную среду.

Проблемы

[ редактировать ]

Иногда предварительное связывание может вызвать проблемы с контрольной точкой приложения и перезапустить библиотеки, такие как blcr, [3] а также другие библиотеки (например, OpenMPI ), использующие blcr внутренне. В частности, при проверке контрольной точки программы на одном хосте и попытке перезапуска на другом хосте перезапущенная программа может завершиться с ошибкой segfault из-за различий в рандомизации адресов памяти библиотеки для конкретного хоста. [4] [5] [ ненадежный источник? ]

См. также

[ редактировать ]
  1. ^ «Страница руководства для update_prebinding» . Связь с разработчиками Apple . Эппл Компьютер Инк.
  2. ^ Краста, Джеймс (17 мая 2004 г.). «Предварительное связывание ELF и что оно может вам дать» . Проверено 10 мая 2006 г.
  3. ^ блкр
  4. ^ «Часто задаваемые вопросы по BLCR» . Проверено 5 января 2012 г.
  5. ^ Херси, Джош (29 декабря 2011 г.). «segfault при возобновлении работы на другом хосте» . Пользователи OpenMPI (список рассылки) . Проверено 5 января 2012 г.

Дальнейшее чтение

[ редактировать ]
  • Елинек, Якуб (4 марта 2004 г.). «Прелинк» (PDF) . Проект 0.7 . Проверено 14 июля 2006 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 32f27a2a45521b8b6a170f2bb380c475__1678226820
URL1:https://arc.ask3.ru/arc/aa/32/75/32f27a2a45521b8b6a170f2bb380c475.html
Заголовок, (Title) документа по адресу, URL1:
prelink - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)