“Bug”中最頭痛的是那么一類:野指針、無效句柄,訪問沖突,跟Windows內核打交道比較多的那些,它們發現難,調試難,定位難。不過AppVerifier就是解決這些問題的工具,實際上,以微軟為首的大的Windows軟件開發商都在使用這個軟件作輔助測試。我在這里推薦它的原因,除了它善於抓這些比較內核的、底層的Bug之外,是微軟出品,可以免費使用和非常簡單是另外幾個因素。 AppVerifier的客觀介紹 AppVerifier 可以免費下載,特別用於檢測和幫助調試內存損壞、危險的安全漏洞以及受限的用戶帳戶特權問題。AppVerifier 有助於創建可靠且安全的應用程序,方法是監視應用程序與 Microsoft? Windows? 操作系統的交互,並配置應用程序使用的對象、注冊表、文件系統和 Win32 API(包括堆、句柄和鎖)。AppVerifier 還包括檢查,以便預測應用程序在非管理員環境中的執行情況。 上面是微軟MSDN中對它的介紹原文。MSDN在“C++安全性最佳做法”中推薦使用它來驗證軟件安全性。MSDN甚至還提倡在整個開發生命周期中使用這個軟件:“在整個軟件開發生命周期中使用時,AppVerifier可節約開發工作的成本,因為它能方便地在早期就識別出問題,而在早期修復錯誤是比較容易且成本較低的。” AppVerifier能識別的問題 AppVerifier 有助於確定: (Copy於MSDN) ? 應用程序正確地使用 API 的時刻: ? 不安全的 TerminateThread API。 ? 正確使用線程本地存儲(Thread Local Storage,TLS)API。 ? 正確使用虛擬空間操作(例如,VirtualAlloc 和 MapViewOfFile)。 ? 應用程序是否使用結構化的異常處理隱藏訪問沖突。 ? 應用程序是否試圖使用無效的句柄。 ? 堆中是否有內存損壞或存在內存問題。 ? 應用程序是否在資源不足的情況下用盡了內存。 ? 是否正確使用了臨界區。 ? 運行在管理員環境中的應用程序在具有較低特權的環境中是否能良好運行。 ? 當應用程序作為受限用戶運行時是否會存在潛在的問題。 ? 在線程的上下文中,是否在將來的函數調用中會存在未初始化的變量。 AppVerifier的使用 下面結合自己的應用介紹一下它的使用方法(非常簡單)。 1。下載AppVerifier 在微軟網站下載,並安裝軟件 http://www.microsoft.com/downloads/details.aspx?FamilyID=bd02c19c-1250-433c-8c1b-2619bd93b3a2&DisplayLang=en 2。運行AppVerifier 在AppVerifier中增加需要驗證的應用程序,對於開發人員,直接選擇工程中輸出的Debug版的可執行文件,可以添加多個文件,也可以添加動態庫DLL。 3。配置需要驗證的項目 AppVerifier大致可以驗證異常、句柄、堆棧、內存、未初始化參數等18個方面(3.3版)的隱患,選擇需要進行測試的項目,並保存設置。 4。在IDE中調試程序 這些跟以前是一樣的,只是在調試過程中AppVerifier會向你報告它檢測到的問題,以異常的方式,或者輸出信息到輸出框中,一般的情況,程序停在發生問題的地方不遠處。 5。取消驗證 在AppVerifier中取消要驗證的程序,否則,驗證代碼一直掛在程序中。 好了,先拿手上的軟件試試法吧,以前沒有任何錯誤,現在,多出來了不少的異常,趕緊看看。。。。 與它是同一個系列的另一個軟件:Driver Verifier,專門來測試驅動的安全。 參考文獻: 感興趣的同事google一下“Application Verifier”,看看簡介。 想學習的同事請閱讀MSDN: 《在軟件開發生命周期中使用應用程序驗證器》 http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/WDdnclinicscripting.mspx?mfr=true 《使用應用程序驗證程序排除 Windows XP中的程序問題》 http://support.microsoft.com/default.aspx/kb/286568/zh-cn 《C++ 安全性最佳做法》 http://msdn2.microsoft.com/zh-cn/library/k3a3hzw7(VS.80).aspx
