2018/11/06-异常-《恶意代码分析实战》

  异常机制允许一个程序在普通执行流之外处理事件。多数时间里,异常是由错误引起的,诸如除零错误。当一个异常发生时,执行转移到处理这个异常的特殊例程。有些异常,比如除零异常,是由硬件抛出的;其他的,比如无效内存访问,是由操作系统抛出的。你也可以在代码中使用RaiseException调用,显示地抛出一个异常。

  结构化异常处理(SEH)是Windows的异常处理机制。在一个32位系统中,SEH信息被保存在栈上。

  当一个异常发生时,Windows查看fs:0来寻找保存异常信息的栈位置,然后这个异常处理器被调用。在这个异常被处理后,执行返回到主线程。

  异常处理时可嵌套的,并且不是所有的处理器都会对应着所有异常。如果当前帧的异常处理器不处理这个异常,这个异常会被传递给调用者帧的异常处理器。最终,如果这些异常处理器中没有一个响应这个异常,那么顶层的异常处理器将是应用程序崩溃。

  异常处理器可以让恶意代码获得执行机会。一个指向异常处理信息的指针被保存在栈上,在栈溢出时,一个攻击者可以覆盖这个指针。通过指定一个新的异常处理器,攻击者可以在一个异常发生时获得执行机会。异常会在调试与反调试章节中(第8~10、15和16章)深度介绍。

  

猜你喜欢

转载自www.cnblogs.com/Fingerprint/p/9917359.html