加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – Win32 EXCEPTION_INT_OVERFLOW与EXCEPTION_INT_DIVID

发布时间:2020-12-14 04:33:35 所属栏目:Windows 来源:网络整理
导读:我有一个关于EXCEPTION_INT_OVERFLOW和EXCEPTION_INT_DIVIDE_BY_ZERO异常的问题. Windows将陷阱IDIV指令生成的#DE错误,并将使用这两个代码之一终止生成和SEH异常. 我的问题是如何区分这两个条件? Intel手册中关于idiv的信息表明它会在“除以零”和“下溢情
我有一个关于EXCEPTION_INT_OVERFLOW和EXCEPTION_INT_DIVIDE_BY_ZERO异常的问题.

Windows将陷阱IDIV指令生成的#DE错误,并将使用这两个代码之一终止生成和SEH异常.

我的问题是如何区分这两个条件? Intel手册中关于idiv的信息表明它会在“除以零”和“下溢情况”中生成#DE.

我快速浏览了intel手册第3卷中#DE错误的部分,最好的办法是操作系统必须解码DIV指令,加载除数参数,然后将其与零比较.

对我来说似乎有点疯狂.为什么芯片设计师不能使用某种标志来区分错误的2个原因?我觉得我一定是错过了一些东西.

有没有人知道操作系统如何区分2种不同的故障原因?

你的假设似乎是正确的. #DE上唯一可用的信息是CS和EIP,它给出了指令.由于两个状态码不同,OS必须解码该指令才能确定哪一个.

我还建议,芯片制造商在这种情况下不需要两个独立的中断,因为任何除以零的是无穷大的,这太大了,无法适应您的目的地寄存器.

至于“如何辨别”,所有知道这些知识的人都可能不被允许透露它,以防止人们利用它(不完全确定如何,但跳入内核模式是开始寻找的好地方利用)或基于可能更改而不通知的实施细节做出假设.

编辑:使用kd播放后,至少可以说在特定版本的Windows XP(32位)上,我可以访问(并且它正在运行的处理器),nt!Ki386CheckDivideByZeroTrap中断处理程序似乎解码了ModRM的值确定是否返回STATUS_INTEGER_DIVIDE_BY_ZERO或STATUS_INTEGER_OVERFLOW的指令.

(显然这是原始的研究,任何人都不保证,也可以匹配基于英特尔手册的扣除额.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读