⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seh2.asm

📁 加密解密2配套光盘,内有加密解密第二版书内提及的软件.
💻 ASM
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 《加密与解密》 异常处理回调函数
;  http://www.pediy.com
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.586 
.model flat,stdcall 
option casemap:none 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  include windows.inc 
  include user32.inc 
  include kernel32.inc 
  
  includelib user32.lib 
  includelib kernel32.lib 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      
.data

Caption db "SEH",0
TextSEH	db "Hello,SEH!",0
Text	db "SEH程序没有运行",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   

.code

_start:
;********************************************************************
; 在堆栈中构造一个 EXCEPTION_REGISTRATION 结构
;********************************************************************
        Assume FS:NOTHING
        push  offset perThread_Handler
        push  fs:[0]       
        mov   fs:[0],esp  
;********************************************************************
; 会引发异常的指令
;********************************************************************            
	mov   esi,0
	mov   eax,[esi]	

 WouldBeOmit:                                  
        invoke  MessageBox,0,addr Text,addr Caption,MB_OK    ;这一句将无法被执行                 
;********************************************************************
; 异常处理完毕后,从这里开始执行
;******************************************************************** 
 ExecuteHere:                           
        invoke   MessageBox,0,addr TextSEH,addr Caption,MB_OK
;********************************************************************
; 恢复原来的 SEH 链
;********************************************************************
        pop     fs:[0]                      
        add     esp,4 

;********************************************************************
        invoke  ExitProcess,NULL        
;********************************************************************
; 将 EIP 指向ExecuteHere处的位置并恢复堆栈
;********************************************************************
perThread_Handler proc uses ebx pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD        

        mov     eax,pContext 
        Assume  eax:ptr CONTEXT
        lea     ebx, ExecuteHere  ; 异常后准备从ExecuteHere后开始执行
        mov     [eax].regEip,ebx  
        xor     ebx,ebx
        mov     [eax].iDr0,ebx    ; 对Drx调试寄存器清零,使断点失效(反跟踪)
        mov     [eax].iDr1,ebx
        mov     [eax].iDr2,ebx
        mov     [eax].iDr3,ebx
        mov     [eax].iDr7,341     
        mov     eax,0             ; ExceptionContinueExecution,表示已经修复
        ret                    
perThread_Handler endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end _start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -