自己程式里面loadlibary 別人的dll, freelibary的時候崩潰。
用了一下ARK工具pchunter就可以安全的卸載dll
請教,有什么辦法我能安全的卸載嗎。
uj5u.com熱心網友回復:
FreeLibrary 之前設定斷點,除錯運行,看看DLL中是否還有未結束的執行緒?uj5u.com熱心網友回復:
測驗下,呼叫loadlibrary dll后,直接釋放freelibrary,是否會崩潰;如果不會,看是不是呼叫了它的方法,然后釋放之前還要呼叫釋放的方法;uj5u.com熱心網友回復:
用工具pchunter 遍歷了執行緒,沒有看到該dll中的執行緒。uj5u.com熱心網友回復:
呼叫loadlibrary dll后,直接釋放freelibrary,就會崩潰,還沒呼叫方法。它的方法可以用,就是現在我需要用過之后把它卸載掉,但是卸載崩潰
uj5u.com熱心網友回復:
你的程式 是 Debug 還是 Release 得我也遇到過別人寫得DLL,
● Delphi 呼叫 freelibrary 得時候就崩潰,
● VC F5 除錯運行,freelibrary 得時候會中斷。Release 時,情況好一些
● .Net ,freelibrary 則沒問題。
我想,應該是行程中有些代碼會把例外屏蔽吧。不過這種問題,屏蔽就是隱患。
uj5u.com熱心網友回復:
同一個執行緒里loadlibrary,freelibrary的嗎?如果是新開的執行緒里loadlibrary,試試在loadlibrary之前做一下COM的初始化(CoInitilize)。uj5u.com熱心網友回復:
是用的release。loadlibrary前做一下COM的初始化是為啥呀,它的方法可以正常呼叫的
用了一個比較底層的函式 NtUnmapViewOfSection 是強行卸載模塊的,然后freelibary卸載掉了。
但是按照說明 NtUnmapViewOfSection 是可以直接卸載的,不知道為什么不成功,要再呼叫freelibary才可以。雖然目的到達了,總感覺不是很完美哈
uj5u.com熱心網友回復:
崩潰應該除錯崩潰的原因, 猜測不是好辦法uj5u.com熱心網友回復:
改成隱式鏈接吧,99%是dll沒有寫好轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/193005.html
標籤:進程/線程/DLL
