La respuesta corta es no.
en un sistema sin ASLR (por ejemplo XP), la carga de una DLL en una dirección no preferida tiene varios costos:
- La sección reubicaciones ha de ser analizada y fixups tener que ser aplicado a toda la imagen .
- El acto de aplicar correcciones provoca fallas de copiado en escritura que son relativamente costosas para la CPU, y también obligan a las páginas a leerse desde el disco, incluso si la aplicación no hace referencia a ellas.
- Cada proceso que carga la DLL en una dirección no preferida obtiene una copia privada de cada página en la que se escribe, lo que aumenta el uso de la memoria.
Los elementos 2 y 3 son por lejos los mayores costos, y son la razón principal por la cual era necesario volver a usar manualmente las DLL.
Con ASLR, el sistema operativo aplica correcciones transparentes, lo que hace que parezca que el archivo DLL se cargó en su dirección preferida. No hay fallas de copia en escritura y no se crean páginas privadas de proceso. Además, las correcciones solo se aplican a las páginas a las que accede realmente la aplicación, en lugar de a la imagen completa, lo que significa que no se leen datos extra del disco.
Además de eso, los esquemas de rebase manual no pueden evitar todos los conflictos de direcciones base (por ejemplo, las DLL de diferentes proveedores pueden entrar en conflicto entre sí o una DLL del sistema operativo podría aumentar de tamaño debido a una revisión y extenderse a un rango reservado para alguna otra DLL, etc.). ASLR es mucho más eficiente a la hora de tratar estos problemas, de modo que cuando se analiza el sistema en su conjunto, en realidad puede mejorar el rendimiento.
Debo admitir que estoy interesado. ASLR parecería invertir décadas de ajustes de rendimiento del sistema operativo. Y sé que Windows TODAVÍA demora demasiado en arrancar. –