dll
延遲鎖相環
延遲鎖相環(Delay—locked Loop,簡稱DLL)技術是在PLL技術上改進得到的,被廣泛應用於時序領域中。它繼承了PLL電路的鎖相技術,但去掉了PLL電路內的振蕩器部分,取而代之的是一根延遲量可控制的延遲線。
與PLL相比,DLL有幾個固有的優點。例如沒有抖動累加,更小的鎖定時間,環路濾波器易集成等。
目前DLL有兩種實現方法,一個是時鐘頻率測量法(CFM,Clock Frequency Measurement),一個是時鐘比較法(CC,Clock Comparator)。
CFM 是測量外部時鐘的頻率周期,然後以此周期為延遲值控制內部時鐘,這樣內外時鐘正好就相差了一個時鐘周期,從而實現同步。DLL就這樣反覆測量反覆控制延遲值,使內部時鐘與外部時鐘保持同步。
CC 的方法則是比較內外部時鐘的長短,如果內部時鐘周期短了,就將所少的延遲加到下一個內部時鐘周期里,然後再與外部時鐘做比較,若是內部時鐘周期長了,就將多出的延遲從下一個內部時鐘中刨除,如此往複,最終使內外時鐘同步。
CFM與CC 各有優缺點,CFM 的校正速度快,僅用兩個時鐘周期,但容易受到噪音干擾,並且如果測量失誤,則內部的延遲就永遠錯下去了。CC 的優點則是更穩定可靠,如果比較失敗,延遲受影響的只是一個數據(而且不會太嚴重),不會涉及到後面的延遲修正,但它的修正時間要比CFM 長。DLL 功能在DDR SDRAM 中可以被禁止,但僅限於除錯與評估操作,正常工作狀態是自動有效的。
DLL綜述
DLL是Dynamic Link Library的縮寫,意為動態鏈接庫。在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可有多個DLL文件,一個DLL文件也可能被幾個應用程序所共用,這樣的DLL文件被稱為共享DLL文件。
它允許程序共享執行特殊任務所必需的代碼和其他資源。比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟體系統時仍會被使用。在構造軟體系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序 EXE 文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁碟空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫大的 EXE 程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的複雜性,也不利於階段性的單元測試。
Windows 系統平台上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL 文件,並可對它們單獨編譯和測試。在運行時,只有當 EXE 程序確實要調用這些 DLL 模塊的情況下,系統才會將它們裝載到內存空間中。這種方式不僅減少了 EXE 文件的大小和對內存空間的需求,而且使這些 DLL 模塊可以同時被多個應用程序使用。Windows 自己就將一些主要的系統功能以 DLL 模塊的形式實現。
一般來說,DLL 是一種磁碟文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴展名的系統文件都可以是 DLL。它由全局數據、服務函數和資源組成,在運行時被系統載入到調用進程的虛擬空間中,成為調用進程的一部分。如果與其它 DLL 之間沒有衝突,該文件通常映射到進程虛擬空間的同一地址上。DLL 模塊中包含各種導出函數,用於向外界提供服務。DLL 可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個 DLL 在內存中只有一個實例;DLL 實現了代碼封裝性;DLL 的編製與具體的編程語言及編譯器無關。
在 Win32 環境中,每個進程都複製了自己的讀/寫全局變數。如果想要與其它進程共享內存,必須使用內存映射文件或者聲明一個共享數據段。DLL 模塊需要的堆棧內存都是從運行進程的堆棧中分配出來的。Windows 在載入 DLL 模塊時將進程函數調用與 DLL 文件的導出函數相匹配。Windows 操作系統對 DLL 的操作僅僅是把 DLL 映射到需要它的進程的虛擬地址空間里去。DLL 函數中的代碼所創建的任何對象(包括變數)都歸調用它的線程或進程所有。
1.靜態調用方式:由編譯系統完成對 DLL 的載入和應用程序結束時 DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對 DLL 的應用記錄減1,直到所有相關程序都結束對該 DLL 的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一般要求。
隱式的調用:需要把產生動態連接庫時產生的 .LIB 文件加入到應用程序的工程中,想使用 DLL 中的函數時,只須說明一下。隱式調用不需要調用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個 DLL 文件時,鏈接程序會自動生成一個與之對應的 LIB 導入文件。該文件包含了每一個 DLL 導出函數的符號名和可選的標識號,但是並不含有實際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應用程序項目中。
當程序員通過靜態鏈接方式編譯生成應用程序時,應用程序中的調用函數與 LIB 文件中導出符號相匹配,這些符號或標識號進入到生成的 EXE 文件中。LIB 文件中也包含了對應的 DL L文件名(但不是完全的路徑名),鏈接程序將其存儲在 EXE 文件內部。
當應用程序運行過程中需要載入 DLL 文件時,Windows 根據這些信息發現並載入 DLL,然後通過符號名或標識號實現對 DLL 函數的動態鏈接。所有被應用程序調用的 DLL 文件都會在應用程序 EXE 文件載入時被載入在到內存中。可執行程序鏈接到一個包含 DLL 輸出函數信息的輸入庫文件(.LIB文件)。操作系統在載入使用可執行程序時載入 DLL。可執行程序直接通過函數名調用 DLL 的輸出函數,調用方法和程序內部其 它的函數是一樣的。
2.動態調用方式:是由編程者用 API 函數載入和卸載 DLL 來達到調用 DLL 的目的,使用上較複雜,但能更加有效地使用內存,是編製大型應用程序時的重要方式。
顯式的調用:
是指在應用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動態連接庫調進來,動態連接庫的文件名即是上面兩個函數的參數,再用 GetProcAddress() 獲取想要引入的函數。自此,你就可以象使用如同本應用程序自定義的函數一樣來調用此引入函數了。在應用程序退出之前,應該用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 釋放動態連接庫。直接調用 Win32 的 LoadLibary 函數,並指定 DLL 的路徑作為參數。LoadLibary 返回 HINSTANCE 參數,應用程序在調用 GetProcAddress 函數時使用這一參數。GetProcAddress 函數將符號名或標識號轉換為 DLL 內部的地址。程序員可以決定 DLL 文件何時載入或不載入,顯式鏈接在運行時決定載入哪個 DLL 文件。使用 DLL 的程序在使用之前必須載入(LoadLibrary)載入DLL從而得到一個DLL模塊的句柄,然後調用 GetProcAddress 函數得到輸出函數的指針,在退出之前必須卸載DLL(FreeLibrary)。
正因為DLL 有佔用內存小,好編輯等的特點有很多電腦病毒都是DLL格式文件。但不能單獨運行。
動態鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執行程序或其它DLL調用來完成某項工作的函數。只有在其它模塊調用動態鏈接庫中的函數時,它才發揮作用。
在Win32中,DLL文件按照片段(sections)進行組織。每個片段有它自己的屬性,如可寫或是只讀、可執行(代碼)或者不可執行(數據)等等。
DLL代碼段通常被使用這個DLL的進程所共享;也就是說它們在物理內存中佔據一個地方,並且不會出現在頁面文件中。如果代碼段所佔據的物理內存被收回,它的內容就會被放棄,後面如果需要的話就直接從DLL文件重新載入。
與代碼段不同,DLL的數據段通常是私有的;也就是說,每個使用DLL的進程都有自己的DLL數據副本。作為選擇,數據段可以設置為共享,允許通過這個共享內存區域進行進程間通信。但是,因為用戶許可權不能應用到這個共享DLL內存,這將產生一個安全漏洞;也就是一個進程能夠破壞共享數據,這將導致其它的共享進程異常。例如,一個使用訪客賬號的進程將可能通過這種方式破壞其它運行在特權賬號的進程。這是在DLL中避免使用共享片段的一個重要原因。
當DLL被如UPX這樣一個可執行的packer壓縮時,它的所有代碼段都標記為可以讀寫並且是非共享的。可以讀寫的代碼段,類似於私有數據段,是每個進程私有的並且被頁面文件備份。這樣,壓縮DLL將同時增加內存和磁碟空間消耗,所以共享DLL應當避免使用壓縮DLL。
找到DLL文件地址:C:\WINDOWS\system32\****.dll時出錯(****就是你的那個找不到的文件名)
開始--運行--msconfig--啟動--找到和你說的類似的選項****--取消勾--確定,然後
1,開始-運行-輸入:regedit,然後回車
2,選擇“我的電腦”,然後點擊“文件”-“導出”-隨便起個名字點“保存”。這樣做的目的是備份一下註冊表,以免誤操作后及時恢復。恢復的方法是,找到你剛才保存的文件,雙擊它,然後選擇“允許導入”即可。
3,選擇“我的電腦”,按F3鍵,然後輸入“****”,點擊“查找下一個”,找到后一定要核對是不是****.dll文件,因為你給的文件名不全,如果確認,對該項點“右鍵”選“刪除”。“此時可以輸入****.dll進行查找,結果出來后要看後面的數值部分,不能光看文件名稱,只要有****.dll在的文件不管它邊上還寫沒寫別的(如:****.dll,load),都要刪除!”
4,然後再按F3鍵-刪除,直到提示“沒有找到相應選項”為止。
5,重新啟動計算機,看看系統有沒有問題。
注,如果出現了其它嚴重問題,請恢復註冊表。
逼迫DLL文件交出內存資源
不少應用程序在啟動時需要調用某些DLL文件,這些DLL文件往往會佔用一定的內存資源,但遺憾的是當應用程序被使用完畢退出系統后,那些曾經被調用的DLL文件並不會隨程序關閉而自動交出它們所佔用的內存資源,這樣就容易造成內存資源的浪費,並且隨著運行的應用程序越多,系統內存資源就被消耗得越多,最終會影響系統的整體運行效率。那有沒有辦法逼迫那些已經過時的DLL文件,交出它們所佔有的內存資源,從而保證系統內存空間始終處於“乾淨”狀態呢?答案是肯定的,我們可以按照如下步驟來逼迫DLL文件交出內存資源:
在註冊表編輯界面中,找到其中的註冊表分支HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer在對應“Explorer”子鍵的右側窗口區域中,檢查一下是否有“AlwaysUnloadDLL”字元串鍵值的身影,如果沒有的話,那可以用滑鼠右鍵單擊右側窗口區域中的空白位置,並從彈出的快捷菜單中依次執行“新建”、“字元串值”命令,然後將新創建好的字元串值名稱設置為“AlwaysUnloadDLL”,再用滑鼠雙擊“AlwaysUnloadDLL”鍵值,在其後界面的“數值數據”文本框中直接輸入數字“1”,並單擊“確定”按鈕,最後刷新一下系統註冊表,這樣就能逼迫那些過時的DLL文件交出曾經佔有的系統內存資源了。
逼迫DLL文件交出空間資源
在頻繁地安裝與卸載應用程序之後,系統中的有些DLL文件就會變成無用的垃圾文件,不過這些垃圾文件仍然會佔用系統的硬碟空間資源,時間一長越來越多的垃圾DLL文件就會消耗越來越多的硬碟空間資源。為此,我們可以通過下面的操作步驟,來將無用的垃圾DLL文件刪除掉:
依次單擊“開始”/“運行”命令,在彈出的系統運行對話框中,輸入字元串命令“regedit”,單擊“確定”按鈕后,打開系統的註冊表編輯界面;
用滑鼠逐一展開其中的註冊表分支HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/SharedDlls在對應“SharedDlls”子鍵的右側窗口區域中,我們就能看到當前系統的所有DLL調用情況,要是對應某個DLL文件的數據顯示為“0”的話,那就說明沒有應用程序使用該DLL文件,那麼該DLL文件就是無用垃圾文件,將這些無用的DLL文件名稱逐一記錄下來;
接下來返回到Windows系統桌面,並依次單擊“開始”/“搜索”/“文件或文件夾”命令,然後在彈出的系統搜索文件對話框中,輸入前面記錄下來的無用DLL文件,再單擊“搜索”按鈕找到無用DLL文件所在的具體位置,之後將這些找到的DLL文件臨時轉移到其他位置,並讓系統再運行一些日子,看看系統是否能夠正常運行,要是系統仍然可以正常運行的話,那我們就能把那些無用的DLL文件真的從硬碟中刪除掉了,這樣就能有效地節省硬碟空間資源了。
借用DLL文件解決系統運行錯誤
由於許多應用程序的DLL文件都是共用的,一旦對某個應用程序執行了卸載操作之後,共用的那個DLL文件也有可能被隨之卸載,這麼一來其他應用程序運行時由於找不到共用DLL文件而出現運行錯誤。當不幸遇到這樣的故障現象時,我們不妨通過對DLL文件的註冊與卸載,來快速有效地解決各種常見的系統故障。
WINXP/WIN2000通過修改DLL提升安全和性能
系統的組策略和註冊表中,我們可以修改一些鍵值來優化我們的系統,並加強操作系統的安全性。可是,對於限制下載、禁止刪除文件等功能,我們無法通過上述的操作來完成,這隻有通過修改系統DLL文件來實現。目前,我們通過修改系統的DLL文件,可以實現禁止刪除文件、禁止IE下載、禁止IE另存為、禁止文件打開方式等功能。
系統中部分DLL文件的功能
1.Browselc.dll IE所需要調用的庫文件DLL結構雛形就是它了
2.Shdoclc.dll 系統窗口及設置等,如刪除文件、重命名
3.Shell32.dll 系統窗口及設置等,如刪除文件、重命名
4.Cryptui.dll IE控制項下載及提示對話框程序
修改DLL文件的方法
1.下載DLL文件修改工具EXESCOPE6.0-6.3或6.4工具
2.獲取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll這幾個鏈接文件。在找這幾個文件時,最好將其他機器的硬碟,掛接在本機中,然後用本機的操作系統啟動並複製這幾個文件。
3.在修改DLL文件的時候,打開該鍵值,在右面的對話框中將所要修改的鍵值禁用即可,不要刪除,以備日後恢復
DLL文件修改秘籍
1.禁止下載的修改方法:打開Shdoclc.dll修改資源--對話框---4416,將4416鍵值禁用即可。
2.禁止網頁添加到收藏夾,打開Shdoclc.dll修改資源--對話框---21400,將該鍵值禁用即可。
3.禁止惡意網頁載入控制項,修改Cryptui.dll文件,要同時修改5個地方才能完全禁止 資源--對話框---130 資源--對話框---230 資源--對話框---4101 資源--對話框---4104 資源--對話框---4107 將以各對話框中的相應鍵值,修改成為禁用就可以了。
4.禁止系統刪除文件修改Shell32.dll,這個文件需要修改5個地方才可以禁止系統刪除文件。資源--對話框---1011 資源--對話框---1012 資源--對話框---1013 資源--對話框---1021 資源--對話框---1022 將以上五個地址的鍵值禁用就可以了!
5.禁止文件被改名,修改shell32.dll,有2個地方需要修改資源--對話框---1018 資源--對話框---1019 將以上兩處的相應鍵值,修改為禁用就可以了!
6.禁止運行菜單,修改shell32.dll,將資源--對話框---1018鍵值設置為禁用。
7.禁止系統文件被挪動修改shell32.dll,需要修改4個地方 資源--對話框---1014 資源--對話框---1015 資源--對話框---1016 資源--對話框---1017
8.禁止目標另存為,修改Shdoclc.dll文件,需要修改3個地方 資源--菜單--258---257 資源--菜單--258---252 資源--菜單--24641--2268 在這個修改中,我們要把各對應的鍵值刪除。打開該鍵值后,右鍵菜單中有刪除。在資源--菜單--24641—2268中,有多項該鍵值,請逐一刪除。
9.禁止自定義文件夾選項修改Shell32.dll文件,需要修改以下4個地方 資源--菜單--215---28719 資源--菜單--216---28719 資源--菜單--217---28719 資源--菜單--216---28719 找到以上四處鍵值,直接需要刪除后即可,而不是禁用。
10.禁止IE文件夾選項,修改Browselc.dll文件,需要修改3個鍵值 資源--菜單--263 (這裡有多個請刪除)---41251(刪除)資源--菜單--266(也有多個請刪除)---41329 (刪除)資源--菜單--268---41251 (刪除)在上面的3個鍵值中,個別鍵值有多處,請逐一刪除。
11.禁止98文件共享控制項,修改Msshrui.dll,需要修改2個地方 資源---對話框---- 1 --- AutoRadioButton 資源---對話框---- 30 --- AutoRadioButton 將以上兩處的鍵值禁用即可。其他的選項,可以根據自己的需要進行修改。找到相應的功能鍵值,將不需要的功能,禁用就可以了。
12.禁止文件的打開方式,修改Url.dll,需要修改2個地方 資源---對話框--- 7000 資源---對話框--- 7005 將以上兩處的鍵值禁用即可。
13.禁止更改系統桌面,修改Shdoc401.dll,有2處地方需要修改 資源---對話框--- 29952--- PushButton:瀏覽資源---對話框--- 29952--- PushButton:圖案 將以上兩處的鍵值禁用即可。
14.禁止系統文件夾自定義,修改Shd401lc.dll,有2處地方需要修改 資源---對話框--- 29957 資源---對話框--- 29958 將以上兩處的鍵值禁用即可。
15.禁止文件保存路徑及打開,修改Comdlg32.dll,有2處地方需要修改 資源---對話框--- 1547 資源---對話框--- 1548 將以上兩處的鍵值禁用即可。