zwalnianie statycznie ladowanych bibliotek

0

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).

0

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.

0

ale jak zaladuje statycznie, to nawet jak wywolam GetModuleHandleW/FreeLibrary zwraac 1, a biblioteka zostaje w pamieci.

Dlaczego tak sie dzieje?

0

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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1