【问题标题】:VirtualBox Guru Meditation error while entering protected mode进入保护模式时 VirtualBox Guru Meditation 错误
【发布时间】:2014-07-04 18:57:47
【问题描述】:

我正在使用 VirtualBox 来模拟​​ x86 电脑。我写了一个进入保护模式的引导加载程序。但我总是遇到 Guru Meditation 错误。这是我的代码:

; clear interrupts
cli
; set up gdt
xor eax, eax
mov ax, ds
shl eax, 4
add eax, gdt
mov [gdtr + 2], eax
mov eax, gdt_end
sub eax, gdt
mov [gdtr], ax
lgdt [gdtr]
; enter protected mode
mov eax, cr0
or  al, 1
mov cr0, eax
; enter kernel
jmp 08h:0

我也测试了 jmp 0x2000:0000 但这也没有用。我做错了什么?

PS:这是我的 GDT 代码:

; global descriptor table
gdt:
dq 0 ; null descriptor

; code descriptor kernel
dw 0x0000 ; base low word
dw 0x4000 ; limit low word
db 0x00   ; base high byte
db 0x40   ; flags
db 0x9A   ; access byte
db 0x02   ; base center byte

; data descriptor kernel
dw 0x0000 ; base low word
dw 0x4000 ; limit low word
db 0x00   ; base high byte
db 0x40   ; flags
db 0x92   ; access byte
db 0x02   ; base center byte
gdt_end:

【问题讨论】:

  • 发布完整代码,例如,我们无法判断您的 gdt 是否损坏。另外,学习使用调试器。
  • @Jester 添加了 gdt 代码
  • @Jester 在编写引导加载程序时很难使用调试器...
  • @BlackBear 如果您正在编写引导加载程序或操作系统,您应该能够使用调试器。这并不是特别困难,因为他使用的是虚拟机:P 相反,他没有给我们完整的代码,并希望我们以某种方式猜测缺失的部分并为他调试。
  • 不知道,应该可以。您的 GDT 条目中的字段混乱,顺序应该是 limit lowbase lowbase centeraccessflagsbase high

标签: assembly x86 virtualbox


【解决方案1】:

根据我使用 CentOS-6.5 Guru Meditation 错误的经验,当您的应用程序需要更多内存大小然后分配内存大小或 CPU 使用率超过 100% 时,就会出现此错误。 所以增加分配的 RAM 大小是解决问题的方法之一

【讨论】:

    【解决方案2】:

    关闭所有正在运行的虚拟机,然后从 bios 中禁用虚拟化。然后重新启动。然后从bios启用虚拟化。重启。 它对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-09
      • 2021-07-31
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多