ASLR вызывает медленную загрузку Dlls?

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

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

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

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

1 ответ

Решение

Краткий ответ: нет.

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

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

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

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

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

Другие вопросы по тегам