识别一般保护故障 (x86) 上的故障地址

2023-12-31

我正在尝试为 x86 上的一般保护错误 (GP#13) 编写 ISR。我无法从 INTEL 文档中找出如何找出导致异常的错误地址。我知道对于页面错误异常(GP#14),cr2 寄存器保存错误地址。任何帮助表示赞赏。


我在这里所做的所有参考资料均来自AMD64架构程序员手册第2卷:系统编程 http://support.amd.com/us/Processor_TechDocs/24593_APM_v2.pdf,它还描述了传统保护模式(即 x86)行为。

第 240 页上的图 8-8 显示了相同特权级别中断后的堆栈布局(即进入 ISR 时的堆栈布局):

在第 8.2.14 节中,您可以看到#GP提供错误代码,以下内容也很有趣:

程序重新启动。 #GP是一个错误类型的异常。在大多数情况下, 保存的指令指针指向引起该指令的指令#GP。请参阅第 230 页的“任务切换期间的异常”,了解在任务切换期间发生此异常时的后果的描述。 任务切换。

引用的部分提到了以下内容:

加载段时任务切换期间可能会发生异常 选择器。访问 TSS 时也可能发生页面错误。在这些 情况下,硬件任务切换机制完成加载新的任务 从 TSS 获取任务状态,然后触发相应的异常 机制。不执行其他检查。当这种情况发生时,保存的 指令指针指向新任务中的第一条指令。

因此,除非您使用硬件任务切换,否则保存的指令指针始终指向错误指令。

要获取错误指令的地址,只需获取保存的EIP and CS来自 ISR 堆栈中的值。 (如果您使用扁平内存模型并且所有段都覆盖整个 4GB,则保存的CS当然,没有兴趣)。

movl 4(%esp), %eax
movw 8(%esp), %ebx

Now, EAX包含保存的EIP and EBX被保存的CS.

Edit:当然,正如指出的那样Alex https://stackoverflow.com/users/968261/alex in the comments https://stackoverflow.com/questions/10360888/identifying-faulting-address-on-general-protection-fault-x86/#comment13352050_10361732,如果#GP是由内存访问引起的,并且您想要访问内存的地址,您将需要解码错误指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

识别一般保护故障 (x86) 上的故障地址 的相关文章

随机推荐

  • HTTPS nonProxyHosts 的 JVM 参数

    所以我有一个相当加载的环境变量 JAVA OPTIONS export JAVA OPTIONS Dhttp proxyHost my proxy com Dhttp proxyPort 1080 Dhttps proxyHost my p
  • Python Eve:请求的资源上不存在“Access-Control-Allow-Origin”标头

    我使用Python EVE框架编写了一个API 当尝试从 AngularJS 应用程序访问 API 时 它显示错误 如下所示 XMLHttpRequest cannot load http 127 0 0 1 5000 user jay3d
  • 创建未知大小的稀疏矩阵

    例如 我有一个文本文件 其中每一行都指示图形上的一条边 2 5 1 表示节点 2 和 5 之间权重为 1 的边 我想使用这些元组创建一个稀疏邻接矩阵 通常 我会将稀疏矩阵初始化为 G scipy sparse lil matrix n n
  • const char* 的奇怪 std::cout 行为

    我有一个方法返回一个字符串以显示为错误消息 根据程序中发生此错误的位置 我可能会在显示错误消息之前添加更多解释 string errorMessage return this is an error somewhere in the pro
  • 在 Java 面板中包含命令提示符

    我有一个批处理文件 可以从 SVN 中检出代码并对其调用几个命令 这发生在 Windows 命令提示符上 我想从我的 java 程序调用这个批处理文件 并且命令提示符必须出现在我的应用程序窗口的控制台中 而不是作为单独的窗口 这样我就可以从
  • 如何在图像周围添加图像边框?

    有没有简单的方法可以在图像周围添加图像边框 原因是我想在图像周围创建阴影效果 图像作为缩略图加载 大小为 110x75 像素 我正在考虑创建阴影边框 但不知道如何将其添加到图像周围 有人知道方法吗 最好是PHP 您可以使用 GD 库或 Im
  • 我的应用程序中的 ic_launcher 图标错误

    我正在开发一个应用程序Honeycomb并遇到了这个非常奇怪的问题 我更改了应用程序图标 ic launcher 在每一个drawable文件夹并确保它在清单中正确 但我有一个标准 settings 启动器中的图标 在应用程序本身中是正确的
  • SVG 圆中 dasharray 属性的奇怪行为

    我正在尝试创建 SVG 圆的无限动画循环 我想创建 12 个相等的块 并将它们分开一些间隙 为了计算我使用的圆片的价值k系数见下表 所以我做了 0 25782 160 我的圆的直径 我得到 41 2512 它应该是我的棋子的值 之后我创建了
  • 获取正在运行的进程的维度

    我正在尝试抓取应用程序中特定 x y 位置的屏幕截图 有没有办法在 Process 对象中获取正在运行的应用程序 然后获取它的尺寸 就像是 Process processlist Process GetProcesses foreach P
  • 验证错误:值无效

    我的 p selectOneMenu 有问题 无论我做什么 我都无法让 JSF 调用 JPA 实体上的 setter JSF 验证失败并显示以下消息 形式 位置 验证错误 值无效 我在同一类型的其他几个类 即连接表类 上进行了此工作 但我一
  • 无法使用 Espresso 将文本添加到 webview 文本字段

    我正在尝试将文本添加到 Esprsso 中的文本字段 在 Web 视图内 但收到此错误 引起原因 java lang RuntimeException 评估错误评估 状态 13 值 message 无法设置选择结束 hasMessage 真
  • Java 中的动态绑定==后期绑定吗?

    在不同的来源中 我读到了有关该主题的不同内容 例如维基百科说 后期绑定经常与动态调度混淆 但两者之间存在显着差异 但几行之后 在 Java 编程中 流行使用术语 后期绑定 作为动态分派的同义词 具体来说 这是指与虚拟方法一起使用的 Java
  • 部分选择排序与合并排序查找“数组中最大的 k”

    我想知道我的思路是否正确 我正在准备面试 作为一名大学生 我遇到的问题之一是找到数组中最大的 K 个数字 我的第一个想法是只使用部分选择排序 例如 从第一个元素扫描数组 并为看到的最低元素及其索引保留两个变量 并与数组末尾的该索引交换 并继
  • 如何批量加载从其他来源生成的自定义 Avro 数据?

    Cloud Spanner 文档说 Spanner 可以导出 导入 Avro 格式 此路径是否也可用于批量摄取从其他来源生成的 Avro 数据 该文档似乎表明它只能导入同样由 Spanner 生成的 Avro 数据 我运行了一个快速导出作业
  • 当 MPMovieControlStyle = MPMovieControlStyleNone 时如何触摸/单击 MPMoviePlayerController 视图

    在我的一个应用程序中 我不想显示任何视频控制器 但我需要接触媒体播放器视图 我需要在触摸电影播放器 时执行一些其他操作 我怎样才能实现它 请帮忙 提前致谢 您可以随时附上UITapGestureRecognizer查看并处理水龙头 UITa
  • 如何在 PySpark 中读取 Avro 文件

    我正在使用 python 编写 Spark 作业 但是 我需要读取一大堆 avro 文件 This https github com apache spark blob master examples src main python avr
  • Firebase 托管 MIME 类型

    有没有人找到一种方法来设置使用 Firebase 托管托管文件时在 Content Type 标头中返回的 mime 类型 文档说他们支持规则文件中的某些标头 但不支持内容类型 无论如何我都将其绑定 但由于错误 hosting header
  • 将范围传递给 AngularJS 上的服务

    我对 AngularJS 还很陌生 我想将范围传递给服务 这样我就可以根据scope value 执行标签搜索 div div div div
  • 扩展和集群 JPA

    我正在 jboss7 上构建一个常规 Java EE 应用程序 该应用程序将在数据层中使用 JPA 我想让这个应用程序随着负载的增加而扩展 虽然如何扩展 Web 层非常清楚 创建更多机器并将它们放在负载均衡器后面 但扩展数据层却不太清楚 我
  • 识别一般保护故障 (x86) 上的故障地址

    我正在尝试为 x86 上的一般保护错误 GP 13 编写 ISR 我无法从 INTEL 文档中找出如何找出导致异常的错误地址 我知道对于页面错误异常 GP 14 cr2 寄存器保存错误地址 任何帮助表示赞赏 我在这里所做的所有参考资料均来自