XCrashHandler原理的简单描述

 

VC2008正确建立PDB文件
http://sunxiunan.com/?p=1300   刚写完一个CST问题的教训 ,发现John Robbins大牛最近也写了一篇博客《Correctly Creating Native C++ Release Build PDBs 》(正确地建立原生C++Release Build PDB文件),里面有不少说法跟我那篇文字近似。在这里再介绍一下John博客里面的大意。关于pdb文件的重要性,John也有另外一篇博客介绍PDB Files: What Every Developer Must Know ,感兴趣的同学可以去看看。     1)最重要的一点,任何一个项目一定要build时生成PDB文件,而且要根据不同的发布版本保存起来,这个对于以后的除错非常有用。   2)建立PDB文件基本上是这几个选项,a)在project setting的C++属性中,选择生成program database,或者直接手动加入/Zi选项,如果有/Z7,把它替换成/Zi。b)在link选项中选择Generate debug info,或者直接加入/debug选项, ...

 

 

XCrashHandler原理的关键点:

API: SetUnhandledExceptionFilter(__in LPTOP_LEVEL_EXCEPTION_FILTER )

---Eanables an application to supersede the top-level exception handler of each thread and process.

设置异常捕获函数.

  当异常没有处理的时候,系统就会调用SetUnhandledExceptionFilter所设置异常处理函数.

  例如一些程序在出错的时候,会向用户报告说程序那出错就是利用这个.例如QQ..

  异常处理中的一部分

  当发生异常时,比如内存访问违例时,CPU硬件会发现此问题,并产生一个异常(你可以把它理解为中断)

  然后CPU会把代码流程切换到异常处理服务例程。操作系统异常处理服务例程会查看当前进程是否处于调试状态

  如果时,则通知调试器发生了异常,如果不是则操作系统会查看当前线程是否安装了的异常帧链(FS[0]),如果安装了SEH(try.... catch....),则调用SEH,并根据返回结果决定是否全局展开活局部展开。如果异常链中所有的SEH都没有处理此异常,而且此进程还处于调试状态,则操作系统会再次通知调试器发生异常(二次异常)。如果还没人处理,则调用操作系统的默认异常处理代码UnhandledExceptionHandler,不过操作系统允许你Hook这个函数,就是通过SetUnhandledExceptionFilter函数来设置。大部分异常通过此种方法都能捕获,不过栈溢出、覆盖的有可能捕获不到。

 

  大部分保护壳都采用异常处理技术,跳出正常的代码指令流程,来迷惑Cracker。

 

     //XCrashHandler原理:通过这个函数来接管异常情况处理(操作系统异常处理服务例程),通过重写相应的回调函数,在回调函数中 //保存相关的错误信息到文件中,并创建一个进程,做邮件发送等的应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值