Home >> Blog >> 動態連接庫 DLL 簡介

動態連接庫 DLL 簡介

什麼是動態連接庫 (DLL)?

動態連接庫 (DLL) 是小程序的集合,較大的程序可以在需要時加載這些小程序以完成特定任務。稱為 DLL 文件的小程序包含幫助較大程序處理可能不是原始程序核心功能的指令。

這些任務的一個示例可能是與特定設備(例如打印機或掃描儀)進行通信以處理文檔。支持特定設備操作的 DLL 文件稱為設備驅動程序。

DLL 包含一些代碼和資料,例如類和變量,或其他資源,例如大型程序可以使用的圖像。

除了作為動態連接庫的總稱外,動態連接庫也是微軟針對 Windows 的共享庫概念版本的名稱。共享庫可以存在於任何操作系統 ( OS ) 中。

動態連接庫是如何工作的?

計算機程序很少寫在一個文件中。它們通常由連接在一起的多個文件組成。

當一個程序運行時,它必須從它的源代碼編譯,這是程序員編寫的人類可讀的代碼。它變成了可執行文件文件,即計算機可以讀取的二進制代碼或機器代碼。

計算機要經過幾個中間步驟才能做到這一點。在這些步驟中,多個文件連接到一個。有兩種類型的連接——靜態和動態——以及兩種類型的相應連接庫:

動態連接庫 (DLL)

靜態連接。這些在流程的早期連接並嵌入到可執行文件中。編譯程序時,靜態庫連接到可執行文件。動態庫稍後在運行時或加載時連接。靜態庫不會在程序之間共享,因為它們被寫入單獨的可執行文件中。

動態連接。DLL 包含程序連接到的文件。這些庫已經存儲在計算機上,位於用戶編寫的程序之外。它們被稱為動態的,因為它們沒有嵌入到可執行文件中——它們只是在需要時連接到它。

導入庫是一種靜態庫,在加載時將所有佔位符符號替換為指向主程序中必要 DLL 資料的實際連接,從 DLL 庫中提取這些函數。程序提供庫的名稱,操作系統創建連接庫的路徑。不同的程序有自己的特定於語言的調用約定來連接到 DLL。

因為動態庫沒有寫入可執行文件,同一個共享庫可以被多個程序同時使用。它們也可以在不更改使用它的整個程序的情況下進行修改。

動態連接庫 (DLL)

動態連接程序有一小段代碼將 DLL 映射到虛擬內存中,程序可以在運行時或加載時訪問它。通過這種設置,動態連接程序不必重複訪問物理內存來訪問庫。虛擬內存將物理內存的同一頁連接到不同程序的虛擬地址(也稱為地址空間),因為運行不同的進程。

在 Windows 操作系統中,動態文件具有“.dll”文件擴展名,而靜態文件具有“.lib”擴展名。DLL 文件也可能有“.ocx”(ActiveX)、“.cpl”(控制面板)或“.drv”(驅動程序)後綴,具體取決於 DLL 功能。

程序並不總是需要動態庫。在某些情況下,靜態連接更可取。但是,某些程序會指定運行所需的 DLL,如果無法訪問它們,則會返回錯誤消息。

動態連接的優點是什麼?

動態連接和 DLL 具有以下優點:

  • 更少的故障。運行時不太可能出現問題,因為不會從磁盤重複檢索 DLL。多個進程可以同時使用同一頁 RAM,從而消除了分頁過程中出錯的機會。
  • 內存效率。DLL 幫助操作系統和程序運行得更快,有效地使用內存並佔用更少的磁盤空間由於文件不與主程序一起加載,因此節省了內存空間。例如,如果用戶正在 Microsoft Word 中編輯文檔,則不需要將打印機 DLL 文件加載到內存中。如果用戶決定打印文檔,Word 應用程序將調用打印機 DLL 文件進行加載。DLL 只加載到內存中一次。在靜態連接中,系統庫必須加載到每個程序中,這意味著每個進程都有自己的同一庫的副本。那會佔用更多的內存。
  • 模塊化架構。DLL 是模塊化架構的一部分,它允許以模塊化方式交付程序。開發人員不必將整個應用程序安裝為一個可執行文件。相反,它可以交換某些庫和組件,而無需更改或重寫整個應用程序。在使用其他程序或銷售或更新應用程序時,它可以做到這一點。

動態連接的挑戰是什麼?

動態連接的一些缺點包括:

  • 錯誤。某些可執行文件需要某些 DLL 才能運行。如果找不到 DLL,可能會出現一條錯誤消息,通知用戶應用程序無法啟動。DLL 和共享庫中損壞的依賴關係問題有時被稱為依賴地獄。
  • 漏洞利用。DLL 劫持,也稱為 DLL 注入,是 Windows 應用程序中的一種常見漏洞,它利用了 DLL 的加載順序。威脅參與者可以在預期加載合法 .dll 文件的路徑中插入惡意 .dll 文件。這可能會導致主應用程序加載帶有可執行文件的惡意 DLL 文件。為此,黑客必須知道可執行文件將調用的 .dll 文件,然後為惡意文件提供與其要替換的合法文件相同的文件名。受感染的 .dll 文件可以將惡意軟件傳送到正在運行的設備或使設備容易受到其他攻擊。例如, 2020 SolarWinds 黑客使用 DLL 注入創建了進入該公司 Orion 平台的後門。
  • 速度。動態連接過程比靜態連接慢。因為動態連接發生在運行時或加載時,它比在編譯時加載需要更多的CPU週期。但是,系統的操作系統使用動態連接更快,因為它在大多數情況下使用的資源更少。

如何修復 DLL 錯誤?

DLL 錯誤很常見,因為在 Microsoft Windows 系統上發現大量 DLL 文件以及它們的使用頻率。當應用程序找不到文件並且沒有它就無法運行時,就會發生錯誤。

DLL 錯誤的常見原因包括:

  • 惡意軟件
  • 文件損壞
  • 文件刪除

重新下載 DLL 文件是解決問題的一種方法。但是,如果原始文件仍在設備上,這可能會使內存過載並創建重複文件。

更好的解決方案包括解決 DLL 問題或執行一些基本維護任務,例如重新啟動計算機並檢查回收站以查看文件是否被意外刪除。如果文件被刪除,但不在回收站中,用戶可以嘗試文件恢復程序。

缺少 DLL 錯誤可能是計算機病毒或漏洞利用的跡象,因此可能需要進行惡意軟件掃描。從以前的備份恢復系統可以通過將計算機的操作系統恢復到 DLL 文件損壞之前的狀態來解決問題。

Microsoft 還提供了多種 DLL 故障排除工具,例如:

  • 依賴沃克。一個免費的實用程序,它記錄程序使用的所有 DLL,並檢查循環依賴關係和 DLL 文件的有效性。
  • DLL 通用問題解決程序。具有多個實用程序的審核工具。該工具的一個示例是將兩個 DLL 文件並排加載到它們自己的文本文件中,並生成第三個文本文件,其中包含兩個文件之間的差異。
  • DLL 幫助資料庫。指導用戶識別不同的 DLL 類型。

used equipment finance

you

solutions

windows

of

dynamic link library

dlls

used equipment finance

not allow these