标题:一个令人困惑的异常处理程序
只看楼主
tigerdown
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2017-8-21
结帖率:69.23%
已结贴  问题点数:20 回复次数:2 
一个令人困惑的异常处理程序
一个令人困惑的异常处理程序

这程序是从书上看到的:

困惑点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
搜索更多相关主题的帖子: mov 困惑 异常处理 定义 push 
2021-11-19 17:01
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:20 
1.
windows api用c的参数传递是规范.

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

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

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

等等...


模组是前人写好,是一种范式,套用到自己的代码,即便当前用不到,也不好随便删除,若删了以后要用就要费一番工夫了.
2021-11-20 06:18
tigerdown
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2017-8-21
得分:0 
这种解释比较合理,很有可能这是从win32 api doc拷贝过来的,但作为出书作者应该严谨些,至少在这里标注一下。
2021-11-20 13:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507583-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.300715 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved