【问题标题】:What exception type should this be?这应该是什么异常类型?
【发布时间】:2011-06-13 11:09:50
【问题描述】:

执行这条指令时出现异常

LFS   ESI,PWORD PTR [EBP+12]

从此页面http://wiki.osdev.org/Double_Fault#Double_Fault
执行任何 PUSH 或 POP 指令或使用 ESP 或 EBP 作为基址寄存器的任何指令,但堆栈地址不是规范形式。 p>

所以我认为这里应该是 Stack-Segment Fault。 但是系统给出了一般保护异常(0D)。

谁能告诉我为什么会这样?

【问题讨论】:

  • 你在什么类型的系统上,你可以在哪里加载段寄存器?
  • @Bo Persson ,这是一种叫做 DMX 的特殊操作系统。这用于在进程堆栈中加载远指针。

标签: exception x86


【解决方案1】:

LFS 的一般保护故障发生在以下情况:

  1. 您所在的段选择器索引 试图加载不与 描述符表限制
  2. 段在描述符中 表,但它不是可读数据 细分
  3. 您的权限级别较高 (意味着较少的特权) 描述符的特权级别。

所以,问题不在于指令本身,而在于段描述符表。

请参阅英特尔软件开发人员手册第 3A 卷中的第 3 章: http://www.intel.com/products/processor/manuals/?wapkw=(Intel+64+and+IA-32+Architectures)

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多