SEH示例2_2

;************************************************************************
;*项目名称:Thread SEH示例      *
;************************************************************************
;*代码名称:Thread SEH_2_2.asm      *
;*代码功能:采用修改异常处的寄存器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 proc uses ebx pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD       
 
 invoke  MessageBox,0,addr szTextSEH,addr szCaption,MB_OK

        mov     eax,pContext
        Assume  eax:ptr CONTEXT       
        
        xor     ebx,ebx
        mov     [eax].iDr0,ebx    ; 对iDrx调试寄存器清零,使断点失效(反跟踪)
        mov     [eax].iDr1,ebx
        mov     [eax].iDr2,ebx
        mov     [eax].iDr3,ebx
        mov     [eax].iDr7,341    
 mov [eax].regEsi,00401001h ;修改发生异常的指令的寄存器值,使其合法以继续执行

        mov     eax,ExceptionContinueExecution    ; ExceptionContinueExecution equ 0,表示异常已经修复,从异常发生地址处继续执行
        ret                   
perThread_Handler endp

;************************************************************************
;程序入口
;************************************************************************
_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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z是一个文件的名称或标识符。这是一个包含一系列文件的压缩存档文件,采用了.7z的文件格式。通过点击或访问相关的下载链接,你可以将这个文件下载到你的计算机中。 在下载过程中,你需要确保你有一个合适的下载工具或者浏览器来支持.7z文件的下载和解压。下载时请确保选择一个安全的来源,以确保文件的完整性和安全性。 一旦下载完成,你可以使用一个解压缩软件(如7-Zip等)来解开这个存档文件,并且提取其中的文件。该存档文件可能包含源代码、二进制可执行文件、库文件、文档等等,具体内容取决于该存档的用途和来源。 下载x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z可能是为了获得特定的软件或工具,以满足你的需求。在得到下载后,你可以按照相关的说明或文档进行后续的操作,如安装、配置或使用。如果你有任何问题或需要进一步的帮助,你可以提供更多细节,以便我们能够提供更具体和有针对性的答案。 ### 回答2: x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z是一个压缩文件的名称,用于下载一个特定的软件版本。"x86_64"表示该软件是针对x86-64架构的,这是一种常见的微处理器指令集架构。"8.1.0"表示软件的版本号为8.1.0。"release"表示该版本为正式发布版本,而不是测试版或开发版。"posix"指明该软件使用了POSIX标准,该标准定义了在UNIX操作系统中,软件应该如何进行交互和通信。"seh"表示该软件使用了结构化异常处理(SEH)机制,这是一种用于处理计算机程序中异常情况的方法。"rt_v6"和"rev0"是软件内部版本号的一部分,用于跟踪和标识软件不同的迭代和修复。".7z"是该压缩文件的文件格式,使用7-Zip压缩算法。 要下载这个文件,您可以访问所在位置的网站或文件存储的平台,并在搜索或下载部分中搜索" x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z"。找到该文件后,可以点击下载按钮或链接,文件将开始下载到您的计算机。请注意,该文件可能比较大,下载时间可能会受到网络速度和连接质量的影响。完成下载后,您可以使用适当的解压缩软件打开该文件,并提取其中的内容以使用该软件。 ### 回答3: x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 是一个文件的名称,它表示一个特定版本的软件或者操作系统的发行版。.7z 是该文件的压缩格式。你可以在互联网上找到这个文件并进行下载。 为了下载这个文件,你可以按照以下步骤进行操作: 1. 打开一个互联网浏览器,如Google Chrome、Mozilla Firefox等。 2. 在浏览器的搜索栏中输入 "x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z" 并按下回车键。 3. 你会看到一系列搜索结果,点击其中一项看看是否能够直接下载这个文件。 4. 如果没有找到直接下载链接,你可以尝试在搜索结果中找到相关网站或论坛,进入这些网站寻找下载链接。有时候开发者会将这些文件放在自己的网站上供用户下载。 5. 一旦你找到了下载链接,点击它并等待文件下载完成。 6. 下载完成后,你可以在下载文件的浏览器目录中找到这个文件。推荐将它保存到一个容易找到的位置,如桌面或者专门的文件夹。 7. 使用解压缩软件(如WinRAR、7-Zip等)解压缩这个文件。右键点击文件,选择 "解压" 或者 "解压缩到指定目录",然后选择解压缩的目标文件夹。 8. 解压缩完成后,你可以浏览这个文件的内容,其中可能会包含安装文件、说明文档、示例代码等。 希望这个回答对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值