• Win32汇编_异常_筛选器


    .386
    .model flat, stdcall
    option casemap:none

    include    windows.inc
    include    user32.inc
    include    kernel32.inc
    includelib user32.lib
    includelib kernel32.lib

    .data
    lpOldHandler    dd      ?

    .const
    szMsg            db      '
    异常发生位置: %08X, 异常代码: %08X, 标志: %08X', 0
    szSafe           db      '
    回到安全地方!!!', 0
    szCaption       db      '
    筛选器异常处理的例子!!!', 0

    .code

    _Handler        proc        _lpExceptionPoint
        LOCAL @szBuffer[256]:byte
       
        pushad
        mov      esi, _lpExceptionPoint
        assume  esi: ptr EXCEPTION_POINTERS
        mov      edi, [esi].ContextRecord
        mov      esi, [esi].pExceptionRecord
        assume  esi: ptr EXCEPTION_RECORD, edi: ptr CONTEXT
        invoke   wsprintf, addr @szBuffer, addr szMsg, [edi].regEip, [esi].ExceptionCode, [esi].ExceptionFlags
        invoke   MessageBox, NULL, addr @szBuffer, NULL, MB_OK
        ;
    设置跳到哪行代码去继续执行,
        mov      [edi].regEip, offset _SafePlace
        assume  esi: nothing, edi: nothing   
        popad
        ;
    返回值设置为继续执行代码
        mov      eax, EXCEPTION_CONTINUE_EXECUTION
        ret
    _Handler endp

    start:
        ;
    设置异常回调函数
        invoke  SetUnhandledExceptionFilter, addr _Handler
        ;
    保存原先的异常回调函数
        mov     lpOldHandler, eax
        xor      eax, eax
        ;
    产生异常,就会跳到上边设置的异常回调函数去执行
        mov     dword ptr [eax], 0
      
    _SafePlace:
        invoke  MessageBox, NULL, addr szSafe, addr szCaption, MB_OK
        ;
    设置回原先的异常回调函数
        invoke  SetUnhandledExceptionFilter, lpOldHandler
        invoke  ExitProcess, NULL
       
        end     start

  • 相关阅读:
    JSE-1.1.4 内存屏障和CPU缓存
    Ajax
    R手册(Common)--R6 and S4
    掌握 小程序项目新建后的 初始代码 及 git远程管理(2)
    微信小程序 网课学习笔记 开发前的准备工作(1)
    vuex中action如何互相调用
    ajax请求时,请求路径自动拼上页面路径?
    10个免费的CDN
    java面向对象
    java中方法的递归调用
  • 原文地址:https://www.cnblogs.com/w413133157/p/1804517.html
Copyright © 2020-2023  润新知