[英]How can dylib unload itself?
我想了解使用dylib並仍在學習的一些事情,所以如果我問愚蠢的問題,請原諒。
防爆。 在下面的代碼中,我們可以只執行hello()代碼,然后在最后卸載它。
__attribute__((constructor))
static void hello()
{
// get handle to this dylib some how ???
// some how unload itself ????
}
我在幾個鏈接上看到,可以從自身卸載一個libray。 但它適用於Windows。 Lib卸載自己 。
2。 另一個進程可以卸載在某個xyz進程中注入的庫嗎?
DLL可能會卸載自身,但如果該進程稍后調用DLL中的函數,則可能導致合法加載DLL的進程崩潰。
您引用的鏈接描述了DLL注入 ,這是DLL的代碼作為進程的地址空間的一部分加載的地方,用於攔截進程對其他“合法”DLL中的函數進行的調用。 它通常以“秘密”的方式完成。 即調用被攔截和重新路由的進程不知道DLL注入。
因此鏈接指的是在極少數情況下使用的高級內容。
您還想知道如果加載的DLL引發異常該怎么辦。 您應該能夠捕獲它,但可能沒有必要卸載DLL。 有在所有平台上的操作系統特定的調用卸載共享庫。 所以,是的,你可以做到。 但是,卸載DLL只是因為它拋出異常是不常見的。 它通常工作正常但如果你的進程中的另一個線程仍在使用該DLL中的代碼(這顯然需要注意),則會導致問題。
簡短的回答是,是的,如果你明確加載它,你可以卸載DLL。 只要仔細考慮什么時候卸載它的最佳時機。
視窗:
LoadLibrary()
FreeLibrary()
GetProcAddress()
在Unix / Linux:
dlopen()
dlclose()
dlsym()
PS:我在答案中使用一個術語DLL來引用Windows和Linux上的共享庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.