複製鏈接
請複製以下鏈接發送給好友

msvcrt.dll

鎖定
msvcrt.dll是微軟在windows操作系統中提供的C語言運行庫執行文件(Microsoft Visual C Runtime Library),其中提供了printf,malloc,strcpy等C語言庫函數的具體運行實現,並且為使用C/C++(Vc)編譯的程序提供了初始化(如獲取命令行參數)以及退出等功能。 [1] 
軟件名稱
msvcrt.dll
軟件平台
windows
最近更新時間
2010年1月18日
軟件語言
中文簡體
開發商
HOMEPAGE
軟件授權
免費版本
軟件大小
0.13 MB
類    型
C語言運行庫執行文件

msvcrt.dll進程信息

msvcrt.dll是標準的微軟C運行庫文件。
系統 DLL文件: 否
常見錯誤: File Not Found, Missing File, Exception Errors
廣告軟件: 否
msvcrt.dll (7.0.2600.0)
包含在軟件
名字: Windows XP Home Edition, Deutsch
執照: 商業
文件細節
文件路徑: C:\WINDOWS\WinSxS\x86_Microsoft.Windows.CPlusPlusRuntime_6595b64144ccf1df_7.0.0.0_x-ww_2726e76a \ msvcrt.dll
文件日期: 2002-08-29 14:00:00
版本: 7.0.2600.0
文件大小: 322.560字節

msvcrt.dll文件hashes

CRC32: BC31AE30
MD5: 4200 BE38 08F6 406D BE45 A7B8 8DAE 5035
SHA1: F030 9D51 6275 4358 F80E ED4C FF93 D036 2B0F DFFD

msvcrt.dll版本信息

公司名稱: Microsoft Corporation
文件描述: Windows NT CRT DLL
文件操作系統: Windows NT, Windows 2000, Windows XP, Windows 2003
文件類型: Application
文件版本: 7.0.2600.0
內部名: msvcrt.dll
法律版權: © Microsoft Corporation. All rights reserved.
原始的文件名: msvcrt.dll
產品名稱: Microsoft® Windows® Operating System
產品版本: 6.1.8638.0

msvcrt.dll產生原因

某些外文軟件在安裝後會引起系統的崩潰,這對於在國外工作學習又使用中文系統的朋友們通常意味着一場災難,下面的文字以飛信的一個經典BUG為例,剖析這種現象產生的原因以及解決方法。
首先,我們讓該問題重現,即雙擊飛信客户端的桌面圖標,讓其彈出該錯誤對話框。錯誤提示出現了,我們先不急着點擊“OK(確定)”按鈕,而是啓動一個調試程序。(本例中使用著名的Microsoft Windbg工具進行調試分析)然後在“File(文件)”菜單中選擇“Attach to a Process...(附加到一個進程)”。這裏之所以要選擇Attach to a Process就是因為我們要將調試器跟蹤到當前這個產生錯誤的進程,然後從內存中實時察看相關的線程堆棧甚至API函數的調用。Windbg中還支持其他的幾種類型的調試,須根據具體情形按需選擇。
然後,我們可以清晰地看到,當系統加載到“dll”時掛起,就是"Warning: Break-in time out, suspending.",在Windows中的表現也就是彈出了上述的錯誤對話框,並且我們還沒有點擊“確定”按鈕,於是程序暫時掛起。因此,我們可以判斷,啓動時加載的dll在執行某個函數過程的時候遇到了錯誤。那麼究竟是什麼樣的函數呢?根據錯誤對話框的信息,我們可以初步猜測是MSVCRT.dll中的_except_handler4_common。於是,我們需要查找一下當前進程中有關該過程的現狀,所以執行"x msvcrt!_except_handler*"命令,返回的結果也在上圖中的底部。在Windbg中,x是查找符號的命令,可以用來查找全局變量的地址或過程的地址。比如x kernel32!*顯示Kernel32.dll中的所有可見變量,數據結構和過程。*號是通配符,代替任意的字符串,為了查找全部的,我們需要使用該通配符。(其實如果你執行“x msvcrt!_except_handler4_common”你會發現沒有任何結果,也就是找不到,其實這也就是出現該錯誤的原因,我們後文分析。因此退一步不輸入"4_common",查找所有_except_handler過程)
結果告訴我們,進程中msvcrt.dll存有的過程有_except_handler2以及_except_handler3,而恰恰沒有_except_handler4。鑑於以上返回結果,我們可以初步斷定,錯誤的起因是因為程序不能執行MSVCRT.DLL中的_except_handler4_common過程,而且原因是當前缺少這個。此時,我們需要藉助Microsoft Dependency Walker進行輔助分析並且確認。
我們啓動Microsoft Dependency Walker,打開該dwmapi.dll,可以發現,該DLL文件的運行將會首先調用MSVCRT.DLL,而且圖1中也標示出來了,在當前調用的MSVCRT.DLL中,缺少一個函數"_except_handler4_common",這起好與我們看到的錯誤現象相以及Windbg分析的結果吻合。如圖1所示:
圖1 圖1
此時,我們可以進一步斷定,要麼是DLL版本不對,要麼就是dwmapi.dll有問題。而這個程序調用的是XP系統的systemroot.system32下面的MSVCRT.DLL,那麼我們猜想,是不是Vista版本下的MSVCRT.DLL就存在一個新版本——即第4版的_exception_handler4呢?我們從Microsoft Windows Vista RTM中提取出位於systemroot.system32下面的MSVCRT.DLL,其版本為“7.0.6001.18000 (longhorn_rtm.080118-1840)”,然後再次使用Dependency Walker打開,發現其中果然存在該新的函數!即“_except_handler4_common”。如圖2所示:
圖2 圖2
到這裏,問題就已經清楚了。正是由於本機的在啓動時調用了用於Vista的DLL組件dwmapi.dll,而該DLL又要嘗試調用一個Vista下msvcrt.dll才有的過程,才出現了該錯誤提示。因為我們發現,該錯誤提示並不影響之後程序的正常使用,而且我們所使用的環境是Windows XP而非Vista,所以推斷該調用dwmapi.dll的過程是非必要的,於是將其重命名或是刪除到回收站,再次啓動, 迎來的是程序正常的使用……之後我查閲了大量的KB資料以及Visual Studio的MSDN資料,發現_except_handler是VC++編譯器自帶的一個內部異常處理。而版本4的_except_handler4_common handler又僅存在於Vista以及之後的系統之中。而且值得注意的是,很多這樣子的錯誤都是由於系統中存在有來自更高級版本系統的文件造成的,而文件的來源於一般有幾種,一般是修改系統時自己放進去的或者別的安裝程序帶入的,也有情況是盜版改版的操作系統中存有的,再有就是本例中的情形——安裝程序可同時用於Windows XP以及Windows Vista。可能是由於XP英文版與中文版的環境的不同,加載調用為Vista準備的dwmapi.dll從而產生了此錯誤。
注:本例中並沒有介紹使用Dependency Walker的“Profile(剖析)”功能,因為該啓動不是靠單文件的,因此比較複雜,而且本例中因為該錯誤不能成功剖析整個啓動過程,剖析過後同樣能夠發現問題。

msvcrt.dll解決方式

一、如果您的系統提示“沒有找到MSVCRT.DLL”或者“缺少MSVCRT.DLL”等類似錯誤信息,請把MSVCRT.DLL下載到本機
二、直接拷貝該文件到系統目錄裏:
1、Windows 95/98/Me系統,則複製到C:WindowsSystem目錄下。
2、Windows NT/2000系統,則複製到C:WINNTSystem32目錄下。
3、Windows XP系統,則複製到C:Windows\System32目錄下。
4、windows vista/7 系統,也是複製到C:\WINDOWS\system32 目錄下。
三、然後打開“開始-運行-輸入regsvr32 MSVCRT.DLL”,回車即可解決錯誤提示!
四、對於初學者,可以使用ReSystem這樣的工具替換MSVCRT.DLL以繞開系統的文件保護。
參考資料