Limitările DLL-urilor încărcate cu întârziere

Există o serie de restricții asociate încărcării întârziate a fișierelor de import.

Fișierele de import de fișiere nu sunt acceptate. Există o cale de by-pass care cuprinde explicit importul de date folosind metode LoadLibrary (sau GetModuleHandle după bibliotecă încărcată funcție auxiliară leneș încărcare DLL) și GetProcAddress.





Întârzierea încărcării Kernel32.dll nu este acceptată. Acest DLL este necesar pentru ca subrutinele auxiliare în așteptare să poată efectua o descărcare amânată.







Încărcarea amânată a DLL poate schimba comportamentul procesului dacă procesele sunt inițializate la punctul de intrare al DLL încărcat cu o întârziere. Un alt caz similar este memoria TLS statică (memorie locală a firului), declarată utilizând directiva __declspec (thread). Nu funcționează dacă DLL-ul este încărcat utilizând metoda LoadLibrary. Cu toate acestea, atât în ​​DLL-urile statice, cât și în DLL-urile încărcate cu o întârziere, memoria dinamică TLS este disponibilă pentru utilizare utilizând funcțiile TlsAlloc. TlsFree. TlsGetValue și TlsSetValue.

Indicatorii statici (globali) ai funcțiilor importate trebuie să fie inițializați din nou după primul apel al funcțiilor corespunzătoare. Motivul este că la primul apel, indicatorul funcției indică invertorul.

În prezent, nu există nicio modalitate de a întârzia încărcarea rutinelor individuale în DLL utilizând un mecanism normal de import.

convențiile de apel personalizate (cum ar fi utilizarea codului condițională în arhitectura x86) nu sunt acceptate. În plus, registrele cu virgulă mobilă nu sunt stocate pe nici o platformă. În cazul în care utilizatorul sau handler ajutor de rutină folosite tipuri de date cu virgulă mobilă, atunci ei vor avea nevoie pentru a efectua o stare de economisire și restaurarea registru pe mașinile în virgulă mobilă în cazul în care sunt utilizate o convențiile de apel pentru trecerea parametrilor la un registre în virgulă mobilă. Trebuie avut grijă la rulare amânate de încărcare DLL (CRT), în cazul în care programul numit funcții CRT care iau parametrii de virgula mobila coprocesorul prin stiva (PND) în funcția auxiliară.







Articole similare

Trimiteți-le prietenilor: