汇编语言无效指令错误概述

所属分类: 软件编程 / 其它相关 阅读数: 1520
收藏 0 赞 0 分享
问题:cmpxchg8b 指令比较一个8字节值edx和EAX带有8字节值内存( 目的地操作数)。 只有有效目标操作数用于此指令是内存 操作数。 如果目标操作数是一个寄存器处理器应产生一个 无效OpCode例外,执行的指令cmpxchg8b应当停止和 处理器应该执行无效OpCode异常处理程序。 此错误发生是 锁定前缀为使用cmpxchg8b指令与一个(无效)寄存器目的地 操作数。 在这种情况下,处理器可能无法启动执行无效OpCode 异常处理程序,因为总线已锁定。 这将导致系统挂起。

提示:如果(无效)寄存器目的地 操作使用cmpxchg8b指令和锁定前缀,系统可能挂起。 没有内存数据已损坏,用户可以执行系统重置以返回到正常 操作。 请注意,特定无效代码序列必要此错误 发生通常不能被生成,该课程的编程也不这样的序列 可可由此商业软件。

此错误仅适用于奔腾 处理器、奔腾处理器与MMX技术、奔腾OverDrive处理器 和奔腾OverDrive处理器带有MMX技术。 奔腾Pro处理器, 奔腾II处理器和i486及更早版本处理器不受影响。

变通办法:有两种变通方法此错误以 保护模式操作系统。 变通办法二者生成一个页面错误当无效 OpCode例外情况。 在以上两例中,页错误将维修前无效 OpCode例外,从而防止锁定状态的发生。 实施 细节将有所不同取决于操作系统。 使用以下方法之一:
第一部分的该解决办法集的第一个7条目(0-6)中断 描述信息表(IDT)在非写页。 当无效OpCode异常 (异常6)出现的原因是锁定cmpxchg8b指令带无效注册 目的地,然后才),处理器将生成一个页面错误如果没有有 写访问该页面包含条目6的IDT。 的第二部分该解决办法 修改页面错误处理程序认识和正确地调度"无效OpCode 例外情况,现在布线通过页面错误处理程序。

部件I、IDT页面访问

标记页面包含的第一个七个条目(0-6)的IDT为只读通过 设置位1的页面表条目为零。 也可以设置cr0.wp(16位)为1。 现在,当" 无效OpCode异常发生锁定cmpxchg8b指令,处理器将 会触发页面错误由于它没有写访问该页面包含条目6的 IDT。 此页面错误阻止了总线锁定状态并给操作系统完全控制 过程"无效操作异常。 请注意,例外6是 无效OpCode例外,因此与此图式的OS有完全控制的任何程序 执行一个无效cmpxchg8b指令。
可选:如果更新条目7-255的IDT发生在课程正常 操作,页面错误应避免在写入这些IDT条目。 这些页面错误 可避免对齐IDT跨越一个4KB页面边界(例如,可在第一个七个 条目(0-6)的IDT在第一个只读"页和"剩余的条目在 读/写页。

第II、页面错误 处理程序修改

修改寻呼容处理程序来计算哪种异常导致该页面错误使用 容地址以cr2。 如果错误代码堆栈上表示产生异常 从震铃0和如果地址对应于无效OpCode例外,然后弹出的 错误代码关闭堆栈和跳转到"无效OpCode异常处理程序。 否则 继续正常页面错误处理程序。

该解决办法有两部分。 首先,中断描述信息表(IDT)对齐 (例如,任何无效OpCode异常会导致页面错误(由于页不 存在)。 其次,页面错误处理程序日期认识和正确地调度 "无效OpCode异常和其他一些例外情况,现在布线通过 页面错误处理程序。

部件I、IDT校准:

对齐中断描述信息表(IDT)这样的,其跨越4KB页面边界, 把第一项启动56字节来自最终的第一个4KB"页。 这将 该第一个七个条目(0-6)在第一个4KB"页和剩余的条目在 第二个页面。
该页面包含的头7条目IDT不能有映射在OS 页面表。 这将导致任何例外0-6生成一份页不存在故障。 一个 页面错误阻止了总线锁定状态并给操作系统完全控制过程 这些异常。 请注意,例外6是无效OpCode例外,因此 与此图式的OS有完全控制的任何程序执行一个无效cmpxchg8b 指令。

第II、页面错误处理程序修改:

识别访问指向的第一页IDT通过测试的容地址cr2中。 页面不存在故障在其他地址可处理正常。
页不存在故障第一页上的IDT,操作系统必须识别和 发送异常造成该页面不存在故障。 继续之前,测试 故障地址以cr2以确定其是否被在地址范围相应 例外情况0-6。
计算哪种异常导致该页不存在故障从容地址 cr2中。
取决于操作系统,某些权限级别检查可能会要求,以及 调整中断堆栈。
跳转到正常处理程序为适当异常。

两个变通办法仅应上实现英特尔处理器返回family=5 通过CPUID指令。
更多精彩内容其他人还在看

Idea 无法引用类问题解决办法

这篇文章主要介绍了 Idea 无法引用类问题解决办法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Unity3D中shader 轮廓描边效果实现代码

这篇文章主要介绍了Unity3D中shader 轮廓描边效果的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

8个基于Lucene的开源搜索引擎(推荐)

Lucene是一种功能强大且被广泛使用的搜索引擎,以下列出8种基于Lucene的搜索引擎,你可以想象他们有多么强大
收藏 0 赞 0 分享

计算机二级如何一次性通过?给NCRE焦躁心情降温!

计算机二级到现阶段应该如何备考,该听什么课?该针对哪些考点重点学习,这些都要做到心里有数,有计划性。这篇文章为大家分享了计算机二级备考技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

HBuilder打包App方法(图文教程)

下面小编就为大家带来一篇HBuilder打包App方法(图文教程)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

深入理解Scala函数式编程过程

这篇文章主要介绍了深入理解Scala函数式编程过程的相关资料,希望通过本文能帮助到大家,让大家学习理解这部分内容,需要的朋友可以参考下
收藏 0 赞 0 分享

权限控制之粗粒度与细粒度概念及实现简单介绍

这篇文章主要介绍了权限控制之粗粒度与细粒度概念及实现简单介绍,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Hbuilder配置Avalon和Vue指令提示的方法详解

HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE,下面这篇文章主要给大家介绍了关于Hbuilder如何配置Avalon和Vue指令提示的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面来一起看
收藏 0 赞 0 分享

Hbuilder连远程接服务器上传代码的图文教程

下面小编就为大家分享一篇Hbuilder连远程接服务器上传代码的图文教程,具有很好的参考价值,一起跟随小编过来看看吧,希望对大家有所帮助
收藏 0 赞 0 分享

App开发建议技巧

有同学问我,对应用开发你有没有值得注意或小技巧的地方可以分享的。比如适配、优化、排查错误什么的。鸡排把自己的总结笔记整理出来了。供大家参考
收藏 0 赞 0 分享
查看更多