dlaczego nie da sie zwolnic biblioteki ladowanej starycznie?
FreeLibrary zwraca 1, a biblioteka pozostaje w pamieci.
W jaki sposob zaladowac dll, by ssytem myslal ze zostala zaladowana statycznie (przez iat, nie LoadLibraryW).
dlaczego nie da sie zwolnic biblioteki ladowanej starycznie?
FreeLibrary zwraca 1, a biblioteka pozostaje w pamieci.
W jaki sposob zaladowac dll, by ssytem myslal ze zostala zaladowana statycznie (przez iat, nie LoadLibraryW).
Albo ładujesz dynamicznie (LoadLibrary/FreeLibrary) albo statycznie i biblioteka jest ładowana przy starcie programu z zwalniana przy jego zakończeniu. Innych możliwości nie masz.
ale jak zaladuje statycznie, to nawet jak wywolam GetModuleHandleW/FreeLibrary zwraac 1, a biblioteka zostaje w pamieci.
Dlaczego tak sie dzieje?
Dowolny moduł wyładujesz funkcją UnmapViewOfFile, a co do FreeLibrary, to zerknij na strukturę LDR_MODULE, ustaw LoadCount na 1 i dopiero wtedy zrób FreeLibrary. Takie praktyki są tylko ciekawostką, można użyć ich do ubijania procesów.
ok dzieki za info, ale przeciez dllki nie sa latowane przez syscall, tylko:
czytane i zapisywane w pamiec przez rodzica. Tak samo loadlibrary.
LDR_MODULE pewnie ma jakas flage ktora powoduje ze freelibrary nie zwalnia jak counter osiagnie 0.