SEH示例2_4
来源:互联网 发布:matlab用数据拟合函数 编辑:程序博客网 时间:2024/04/28 22:58
;************************************************************************
;*项目名称:Thread SEH示例 *
;************************************************************************
;*代码名称:Thread SEH_2_4.asm *
;*代码功能:使用esp取参数,没用函数定义格式 *
;* 采用修改异常处的寄存器regEsi值来修复异常,然后从异常处继续执行 *
;************************************************************************
;*代码作者:by lujue, 2006-10-30 *
;************************************************************************
;************************************************************************
;汇编模式定义
;************************************************************************
.386
.model flat,stdcall
option casemap:none
;************************************************************************
;头文件定义
;************************************************************************
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;************************************************************************
;数据段定义
;************************************************************************
.data
szCaption db "Thread SEH示例",0
szTextSEH db "We are in Thread Structured Exception Handler!",0
szTextOK db "修复了异常",0
;************************************************************************
;代码段
;************************************************************************
.code
;********************************************************************
; 函数功能:异常处理回调函数:修改ESI使其指向合法 ,然后继续从异常处执行
;********************************************************************
perThread_Handler:
push ebp
mov ebp,esp
invoke MessageBox,0,addr szTextSEH,addr szCaption,MB_OK
mov eax,[ebp+10h] ; eax指向CONTEXT结构
xor ebx,ebx
mov [eax+4h],ebx ; 对iDrx调试寄存器清零,使断点失效(反跟踪)
mov [eax+8h],ebx
mov [eax+0Ch],ebx
mov [eax+10h],ebx
mov edx,00401001h ;修改发生异常的指令的寄存器值,使其合法以继续执行
mov [eax+0A0h],edx
xor eax,eax ; ExceptionContinueExecution equ 0,表示异常已经修复,从异常发生地址处继续执行
mov esp,ebp
pop ebp
ret
;************************************************************************
;程序入口
;************************************************************************
_start:
;********************************************************************
; 在堆栈中构造一个 EXCEPTION_REGISTRATION 结构
;********************************************************************
Assume FS:NOTHING
push offset perThread_Handler
push fs:[0]
mov fs:[0],esp
;********************************************************************
; 会引发异常的指令
;********************************************************************
mov esi,0
mov eax,[esi] ;异常返回后从异常发生处继续执行
invoke MessageBox,0,addr szTextOK,addr szCaption,MB_OK
;********************************************************************
; 恢复原来的 SEH 链
;********************************************************************
pop fs:[0]
add esp,4
invoke ExitProcess,NULL
end _start
- SEH示例2_4
- SEH示例2_2
- SEH示例2_3
- SEH示例2_5
- Thread SEH示例2_1
- SEH示例代码1
- 2_4
- Win32 SEH异常深度探索_4 编译器对SEH的支持
- Win32 SEH异常深度探索_4 编译器对SEH的支持
- Win32 SEH异常深度探索_4 编译器对SEH的支持
- Final SEH示例1_1
- Final SEH示例1_2
- SEH 机制探索2 --- 构建 SEH 链
- SEH结构化异常处理示例
- 16_4(2)指来指去
- SEH 进阶(2)
- SEH X64(2)
- SEH
- [用友维护]危险的系统
- Oracle PL/SQL中游标声明中表名动态变化的方法
- 窗体的背景色和文本的背景色
- malloc(0)的问题
- 理解ATL中的关键点
- SEH示例2_4
- yu bie diu
- SEH示例2_5
- 下划线开头的函数的含义
- 运行时刻错误:DAMAGE: After normal block
- 逐步讲解用C#实现俄罗斯方块之核心代码[完结篇]
- SOA面向服务的业务转换在零售业中的最佳实践
- 简单的rss阅读器
- 初战luncene.net(1)