用C和C++修复非常规漏洞

转帖|其它|编辑:郝浩|2009-02-20 11:12:05.000|阅读 678 次

概述:难以找到的漏洞一般出现在发放代码的时候,而不是在修复的时候。我把这看作是非常规的错误。这往往是由于未初始化变量造成的。修复的途径之一是把您的应用程序调用创建为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@evget.com

文章转载自:IT专家网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP