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

问题: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指令。

(0)

相关推荐

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

    问题:cmpxchg8b 指令比较一个8字节值edx和EAX带有8字节值内存( 目的地操作数). 只有有效目标操作数用于此指令是内存 操作数. 如果目标操作数是一个寄存器处理器应产生一个 无效OpCode例外,执行的指令cmpxchg8b应当停止和 处理器应该执行无效OpCode异常处理程序. 此错误发生是 锁定前缀为使用cmpxchg8b指令与一个(无效)寄存器目的地 操作数. 在这种情况下,处理器可能无法启动执行无效OpCode 异常处理程序,因为总线已锁定. 这将导致系统挂起. 提示:如果

  • 汇编语言常见错误信息中文注解

    本文的目标是收集大部分汇编中常见错误信息及对其的中文注解,方便大家在写汇编程序时能够快速地定位错误并解决问题. ml.exe错误信息: 复制代码 代码如下: FATAL   严重错误 cannot open file不能打开文件 I/O error closing fileI/O错误 正在关闭文件 I/O error writing fileI/O错误 正在写文件 I/O error reading file            I/O错误 正在读取文件 out of memory      

  • FCKeditor 源代码分析附中文注释

    这几天都在研究FCKeditor的源代码 (FCKeditor就是网络中应用比较广泛的网页编辑器)  这里需要感谢nileaderblog的辛苦翻译. 几乎搜遍了Internet,似乎对于fckconfig.js这个文件讲解的很多,但对于fckeditor.js这个FCK的核心类文件的资料几乎为0. 所以,花了整整一天的时间,以挤牙膏的方式,对fckeditor.js这个fck核心类文件作了自己力所能及的注释,供同样学习fck的网友一个参考. 鉴于笔者水平有限,在此,请广大高手指出我的注释中不妥

  • Python基于进程池实现多进程过程解析

    1.注意:pool必须在 if __name__ == '__main__' 下面运行,不然会报错 2.多进程内出现错误会直接跳过该进程,并且默认不会打印错误信息 3.if__name__下面的数据需要通过参数传入主函数里面,不然主函数获取不到该数据值而报错. 4.若不通过传参形式传入数据,可以定义全局变量.但是全局变量的值不能在多进程里面进行修改. 代码如下 from multiprocessing import Pool # 进程池,用于多进程 import os # 用于获取当前执行的文件

  • Java8 使用CompletableFuture 构建异步应用方式

    目录 概述 同步API VS 异步API 同步API 异步API 同步的困扰 实现异步API 将同步方法改为异步方法 处理异常错误 概述 为了展示 CompletableFuture 的强大特性, 创建一个名为 best-price-finder 的应用,它会查询多个在线商店,依据给定的产品或服务找出最低的价格. 这个过程中,会学到几个重要的技能. 如何提供异步API 如何让你使用了同步API的代码变为非阻塞代码 我们将共同学习如何使用流水线将两个接续的异步操作合并为一个异步计算操作. 比如,在

  • Pygame transform模块入门介绍

    目录 简介 函数说明 简介 pygame模块用于变换Surface,Surface变换是一种移动或调整像素大小的操作.所有这些函数都是对一个Surface进行操作, 并将结果返回一个新的Surface. 有些变换被认为是破坏性的.这意味着每次执行这些变换都会丢失像素数据.常见的例子是调整大小和旋转.出于这个原因, 重新变换原始Surface比继续多次变换图像要好.(例如, 假设您正在制作一个弹跳弹簧的动画, 它将膨胀和收缩.如果您将尺寸变化逐步应用于之前的图像, 您将失去细节.相反, 总是从原始

  • 浅谈PowerShell 捕获错误

    之前的文章我们演示了如何使用 Windows PowerShell 构建相当高级的清单工具.我创建的工具提供了多个有关输出的选项,这应归功于外壳的内置功能和将函数应用于对象. 我所创建的函数有一个无可否认的弱点:它不能适度处理可能发生的任何错误(例如连接或权限问题).这正是我要在本期的 Windows PowerShell 专栏中加以解决的,我将介绍 Windows PowerShell 所提供的错误处理功能. 设置 Trap 在 Windows PowerShell 中,Trap 关键字定义一

  • 汇编语言超浓缩教程

    所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样).某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了.为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ--).但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP.WINRAR-依次压迫,嘿嘿!

  • 虚拟化技术概述 虚拟机安装与管理手册

    概述:虚拟化技术的介绍(kvm,qemu),虚拟机的安装,虚拟机的管理(virt-manger,virsh等). 1.为什么要有虚拟化技术? 如果你的主要操作系统是windows但是又需要在Linux上工作,像VMware(需要付费...)或者virtualbox一定是你的首选,这样你就可以在两个操作系统间随意切换了,除了这其实我们还有解除了很多虚拟化技术:比如虚拟光驱,我们完全不需要真正的光驱也可以使用光盘镜像,这些都是我们日常接触到的,但并不是虚拟化技术的全部,现在比较热门的docker容器

  • Ajax的概述与实现过程

    一.ajax概述 1.Ajax是Asynchronous([ə'sɪŋkrənəs) JavaScript XML的简写,不是一门新技术,而是对现有技术的综合利用.这一技术能够向服务器请求额外数据而无需刷新页面,带来了更好的用户体验 2.Ajax技术的核心是XMLHttpRequest对象(简称XHR),这是由微软首先引入的一个特性.在XHR出现之前,Ajax式的通信必须借助一些hack手段来实现,大多数是使用隐藏的框架或内嵌框架. 3.XHR为向服务器发送请求和解析服务器响应提供了流畅的接口.

随机推荐