2010-09-01 21 views
5

MSVC'de, Temel Adres Randomizaiton varsayılan bir seçenektir. (VS2005'ten beri?)ASLR, Dlls'in yavaş yüklenmesine neden oluyor mu?

Artık, dll'nin temel adresini el ile yeniden kaydetmiyorum.

VS2003 kullandığımda yükleme performansını iyileştirmek için tüm donanımlarımı yeniden çizdim.

ASLR seçeneğini kullanırsam, yükleme performansı her zaman azalır?
(Kursun başka avantajlar bulabilirim)

+0

Kabul etmeliyim, ilgimi çekiyorum. ASLR, OS'den onlarca yıllık performans tweaks'lerini tersine çevirir. Ve Windows STILL'in açılmasının çok uzun sürdüğünü biliyorum. –

cevap

8

Kısa cevap no. ASLR (örneğin XP) olmadan sistem üzerinde

bir tercih edilmeyen bir adreste DLL yükleniyor birkaç maliyetleri vardır:

tehcir bölüm ayrıştırılır ve fixups görüntünün tamamına uygulanması gerekecektir edilecek olan
  1. .
  2. Düzeltmeleri uygulama eylemi, göreceli olarak daha pahalı CPU'lu, yazma uygulamalı hatalara neden olur ve ayrıca, uygulama tarafından başvurulan olmasalar bile, sayfaların diskten okunmasını zorlar.
  3. DLL'yi tercih edilmeyen bir adreste yükleyen her işlem, yazılan her sayfanın özel bir kopyasını alır ve bu da bellek kullanımını artırır.

Öğeler 2 ve 3 en büyük maliyetlerdir ve DLL'lerin zorunlu olarak kullanılmasının neden ana nedenidir.

ASLR ile, düzeltmeler işletim sistemi tarafından saydam olarak uygulanır; bu, DLL'nin tercih edilen adreste gerçekten yüklü gibi görünmesini sağlar. Üzerine yazma hataları yoktur ve işlem özel sayfaları oluşturulmaz. Ayrıca, düzeltmeler yalnızca görüntünün tamamı tarafından değil, uygulama tarafından erişilen sayfalara uygulanır; bu, diskten fazladan veri okunmadığı anlamına gelir.

Buna ek olarak, el ile yeniden oluşturma şemaları tüm temel adres çakışmalarını önleyemez (örneğin, farklı satıcılardan gelen DLL'ler birbiriyle çakışabilir veya bir OS DLL'si bir düzeltme nedeniyle boyutunun artmasına neden olabilir. diğer bazı DLL, vb için ayrılmış bir aralık. ASLR, bu konularla uğraşırken çok daha verimlidir, bu nedenle sisteme bir bütün olarak bakıldığında, performansı gerçekten artırabilir.

+0

Paketleyici/unpacker'ı daha önce yazdım ve yer değiştirme 1,2,3'ünüz doğruydu, çünkü yer değiştirme tablosunu yürütün ve tüm düzeltmeleri elle montaj programına uygula. Ama sanırım bir süreç çatalı diğerini, başlangıçta aynı sayfa paylaşımını paylaştığında, COW mekanizması onları farklılaştırmaya (ASLR durumunda) kadar zorlar ve bu nedenle sayfa çizelgesinin çoğaltılması gerekir. Ayrıca bu, MMU sayfa çevirisini yaparken ek TLB girişleri (bazen TLB önbellek çalkalaması bile) oluşturmak anlamına da gelir. Performans bundan dolayı acı çekecek mi? –

+5

@Pavel: Bu bilgiye nereden geldiniz? Windows'da ASLR'nin performans etkilerini okumakla ilgileniyorum. Cevabınız burada, aramalarım çok az sonuç verdi. – mcmcc

+0

ASLR "düzeltmelerinin işletim sistemi tarafından trasnparently olarak uygulandığını hiç okumadım." Bunun için bir alıntı var mı? –

İlgili konular