ASLR вызывает медленную загрузку Dlls? - PullRequest
6 голосов
/ 01 сентября 2010

В MSVC базовый адрес Randomizaiton является параметром по умолчанию. (С VS2005?)

Итак, я больше не перебазирую вручную базовый адрес dll.

Но я перебазировал все свои dll, чтобы улучшить производительность загрузки при использовании VS2003.

Если я использую опцию ASLR, производительность загрузки всегда снижается?
(Конечно, я могу получить другие преимущества)

1 Ответ

9 голосов
/ 08 сентября 2010

Короткий ответ - нет.

В системе без ASLR (например, XP) загрузка DLL по нежелательному адресу имеет несколько затрат:

  1. Раздел перемещения должен быть проанализирован, и исправления должны быть применены ко всему изображению.
  2. Акт применения исправлений приводит к ошибкам копирования при записи, которые относительно дороги с точки зрения использования процессора, а также вынуждают страницы считываться с диска, даже если на них не ссылается само приложение.
  3. Каждый процесс, который загружает DLL по не предпочтительному адресу, получает личную копию каждой записанной страницы, что приводит к увеличению использования памяти.

Позиции 2 и 3 на сегодняшний день являются самыми большими затратами и являются основной причиной, по которой вручную требовался перебазирование DLL-библиотек.

В ASLR исправления применяются прозрачно в ОС, благодаря чему создается впечатление, что DLL действительно загружена по своему предпочтительному адресу. Нет ошибок копирования при записи и не создаются страницы, закрытые для процесса. Кроме того, исправления применяются только к страницам, к которым фактически обращается приложение, а не ко всему изображению, что означает, что с диска не считываются дополнительные данные.

Кроме того, схемы ручного перебазирования не могут предотвратить все конфликты базовых адресов (например, библиотеки DLL разных поставщиков могут конфликтовать друг с другом, или DLL-библиотека ОС может увеличиться в размерах из-за исправления и переместиться в диапазон зарезервирован для некоторой другой DLL и т. д.). ASLR намного эффективнее справляется с этими проблемами, поэтому если рассматривать систему в целом, она может реально улучшить производительность.

...