当前位置: 首页 > ds >正文

Windows逆向工程提升之异常处理机制

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

Exception

Windows异常处理机制

异常类型

处理流程

标准C++异常处理机制

结构化异常处理(SEH)

结构化异常处理 (SEH)

SEH适用场景

SEH语法与流程

除零异常演示

内存异常演示

异常过滤器函数


Exception

Windows异常处理机制

异常类型
  • 硬件异常:由CPU触发(如除零、访问违例、断点指令)
  • 软件异常:由RaiseException()主动抛出
  • 系统异常:如内存不足、堆栈溢出等
处理流程
  • ​分发阶段:系统寻找异常处理函数
  • 处理阶段:处理函数决定继续执行或终止
  • ​栈展开(Unwinding)​:清理栈帧资源
  • ​终止处理(Termination Handlers)​:__finally块执行
标准C++异常处理机制
  • 使用try-catch-throw语法。
  • 处理运行时错误(如访问非法内存、逻辑错误)。
  • 更推荐用于逻辑异常(非硬件异常)。
结构化异常处理(SEH)
  • 操作系统级别的异常处理,用于处理访问违法页、算术溢出或硬件异常等低级错误。
  • 提供底层的异常捕获能力,适合控制访问权限和硬件级错误处理。

结构化异常处理 (SEH)

  • SEH(Structured Exception Handling,结构化异常处理)是 Windows 操作系统提供的一种错误处理机制,用于捕获和处理运行时异常。
  • 允许开发者处理硬件异常(如内存访问违规、除以零、堆栈溢出)和软件异常,提供一种保护代码执行、分析异常并恢复功能的机制。
SEH适用场景
  • 捕获 硬件异常(如访问违规、除零、堆栈溢出)。
  • 实现低级的 容错机制,例如保护进程在运行中不崩溃。
  • 配合 逆向工程,在分析程序运行逻辑时保护或记录异常。
SEH语法与流程
  • __try:定义保护代码块。异常发生时,会跳出该代码块并转到异常处理块。
  • __except:捕获异常并处理。通过过滤器表达式判断异常类型及处理方式。
  • __finally:无论是否发生异常,都会执行。通常用于释放资源或清理逻辑。
__try {  // 正常代码块,可能会引发异常的代码  
}  
__except (filter_expression) {  // 异常处理代码块,根据过滤条件决定是否处理异常  
}  
__finally {  // 清理代码块,无论是否发生异常,都会执行  
}
除零异常演示
#include <windows.h>  
#include <iostream>  int main() {  __try {  int x = 10, y = 0;  int z = x / y;  // 引发 EXCEPTION_INT_DIVIDE_BY_ZERO 异常  }  __except (GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ?  EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {  std::cout << "捕获到整数除零异常。" << std::endl;  }  std::cout << "程序继续执行!" << std::endl;  return 0;  
}
内存异常演示
#include <windows.h>  
#include <iostream>  int main() {  __try {  int* ptr = nullptr;   // 空指针  *ptr = 42;            // 引发 EXCEPTION_ACCESS_VIOLATION 异常  }  __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?  EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {  std::cout << "捕获到非法内存访问异常。" << std::endl;  }  return 0;  
}
异常过滤器函数
  • 在 __except 块中,过滤器表达式可以用来根据异常代码进行判断,常用宏和函数包括:
  • GetExceptionCode():返回引发异常的异常代码。
  • 返回值:
    • EXCEPTION_CONTINUE_EXECUTION:忽略异常,恢复继续执行(恢复执行)。
    • EXCEPTION_CONTINUE_SEARCH:允许Windows继续查找接下来的异常处理程序(继续向上传递异常)。
    • EXCEPTION_EXECUTE_HANDLER:执行异常处理程序(执行__except块)。
    • __try {  int* p = nullptr;  *p = 100;  // 可能引发 EXCEPTION_ACCESS_VIOLATION  
      }  
      __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?  EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {  printf("捕获了一个访问违规异常!\n");  
      }

http://www.xdnf.cn/news/8841.html

相关文章:

  • docker 镜像完整生成指南
  • ResponseBodyEmitter与SseEmitter使用
  • MyBatis实战指南(二)如何实现小鸟图标与导入Teacher数据库表实战
  • 《深入剖析:Python自动化测试框架之unittest与pytest》
  • 微服务——网关
  • TypeScript
  • OpenCV 第7课 图像处理之平滑(一)
  • Flink流水线集成Gravitino
  • 微软Build 2025五大AI发布
  • 人工智能数学基础实验(五):牛顿优化法-电动汽车充电站选址优化
  • 基于微信小程序的漫展系统的设计与实现
  • 研报精读:数据要素市场培育及企业数据资源会计处理实证研究【附全文阅读】
  • 基于opencv的全景图像拼接
  • 【ExcelVBA 】类模块学习从入门到放弃
  • 数据仓库中的业务域与数据域
  • 关于PHP的详细介绍,结合其核心特点、应用场景及2025年的技术发展趋势,以清晰的结构呈现:
  • 用HTML5实现实时ASCII艺术摄像头
  • git子模块--常见操作
  • HarmonyOS NEXT 技术特性:分布式软总线技术架构
  • OpenLayers 加载全屏显示控件
  • 【Fargo】razor框架调用mediasoup的发送和接收能力
  • FFT Shift
  • 双目视野高精度拼接
  • PCB设计教程【入门篇】——PCB设计基础-PCB构成与组成
  • DeepONet深度解析:原理、架构与实现
  • python+vlisp实现对多段线范围内土方体积的计算
  • 连接表、视图和存储过程
  • JDK21深度解密 Day 3:模式匹配全解析
  • pvlib(太阳轨迹)
  • nginx的一些配置的意思