轉帖|其它|編輯:郝浩|2009-02-20 11:12:05.000|閱讀 680 次
概述:難以找到的漏洞一般出現在發放代碼的時候,而不是在修復的時候。我把這看作是非常規的錯誤。這往往是由于未初始化變量造成的。修復的途徑之一是把您的應用程序調用創建為OutputDebugString。在Windows32,這些是在Windows.h包含文件中聲明的。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
難以找到的漏洞一般出現在發放代碼的時候,而不是在修復的時候。我把這看作是非常規的錯誤。這往往是由于未初始化變量造成的。修復的途徑之一是把您的應用程序調用創建為OutputDebugString。在Windows32,這些是在Windows.h包含文件中聲明的。有些牽強的例子說明了這一點。當然現實中是由編譯器發出警告,所以你永遠不應該忽視編譯器的警告!
OutputDebugString()希望一個const char*,而這在C,C + +中很容易實現。盡管這可能需要些小技巧才能做到,不過,不用擔心,我們有DbOutInt()。它需要一個字符串標簽和一個int變量,使用一個字符串流來把int轉換為字符串,然后使用字符串元函數c_str(c)進入C型字符串,這就是OutputDebugString()的要求。
#include "stdafx.h" // Only for Microsoft compilers
#include
#include
#include
using namespace std;
void DbgOutInt(string label, int value ) {
stringstream strs;
strs << value;
label.append(strs.str()) ;
const char *c_str =label.c_str() ;
OutputDebugString( c_str ) ;
}
int main(int argc, char* argv[])
{
int a;
int b=a+1;
DbgOutInt("Value of b= ",b) ;
cout << "Value of b = " << b << endl;
return 0;
}
此處明顯的漏洞是變量a沒有被初始化,并且由于修復輸出
Value of b= -858993459
是一個重要提示。
觀察修復輸出
如果你在一個修復器中運行這個,你應該會在輸出窗口中看到輸出文本。在Borland和微軟IDEs中都有此功能。
你要從命令行中要求獲取修復輸出。
SysInternals.com修復查看功能
Sysinternals.com網頁(被微軟收購了但其鏈接仍然可用)提供了一個非常好的功能,即故障排除觀察。它列入了混雜功能頁面并且下載起來十分便捷。
只要按照如上所述運行該功能,并且在需要的時候點擊幫助說明。你就可以隨時停止或啟動登錄,并把獲得的輸出以文本文件的方式保存在磁盤里。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:IT專家網