注册 登录
编程论坛 汇编论坛

一个令人困惑的异常处理程序

tigerdown 发布于 2021-11-19 17:01, 5036 次点击
一个令人困惑的异常处理程序

这程序是从书上看到的:

困惑点1:为什么要用C语言作为参数传递规范?
困惑点2:定义了esi:ptr EXCEPTION_RECORD,但没用到,为什么要定义呢


_Handler    proc    C _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext

        pushad
        mov    esi,_lpExceptionRecord
        mov    edi,_lpContext
        assume    esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
        mov    eax,_lpSEH
        push    [eax + 0ch]
        pop    [edi].regEbp
        push    [eax + 8]
        pop    [edi].regEip
        push    eax
        pop    [edi].regEsp
        assume    esi:nothing,edi:nothing
        popad
        mov    eax,ExceptionContinueExecution
        ret

_Handler    endp
2 回复
#2
Valenciax2021-11-20 06:18
1.
windows api用c的参数传递是规范.

2.代码中没有用esi:ptr EXCEPTION_RECORD,是因为代码中没有利用而已.

EXCEPTION_RECORD是一个记录,如何利用当中资料是程式师自决,

例如想知道,
异常码 = [esi].ExceptionCode
异常标誌 = [esi].ExceptionFlags
异常地址 = [esi].ExceptionAddress

等等...


模组是前人写好,是一种范式,套用到自己的代码,即便当前用不到,也不好随便删除,若删了以后要用就要费一番工夫了.
#3
tigerdown2021-11-20 13:26
这种解释比较合理,很有可能这是从win32 api doc拷贝过来的,但作为出书作者应该严谨些,至少在这里标注一下。
1