xlt201314 发表于 2025-4-18 20:07:27

GDTR加载的问题

为啥GDTR加载完了基地址是0;是在bochs里加载的,不知道是写错了还是什么?求助!

FishC 发表于 2025-4-18 20:09:14

GDTR基地址为0的可能原因及解决方法

若使用 lgdt 指令后GDTR基地址仍为0,常见原因如下:


[*]数据结构错误
GDTR加载数据应为:

gdt_ptr:
    dw gdt_end - gdt_start - 1; 界限
    dd gdt_start               ; 基地址(32位系统)

常见错误是:
- 基地址和界限顺序颠倒
- 忘记用 dd 存储基地址
- 未正确计算GDT物理地址(实模式下需 段地址<<4 + 偏移)

[*]未进入保护模式
GDTR基地址在实模式下可能显示为0(Bochs调试器 info gdt 更可靠)

[*]Bochs调试显示延迟
执行 lgdt 后需执行下条指令才会更新寄存器显示


建议检查:
1. 用Bochs命令验证:
xp /6bx 0x地址   // 查看GDTR数据结构内容
info gdt          // 查看实际加载的GDT
sreg             // 查看GDTR寄存器值

2. 典型正确加载代码(实模式):

lgdt

gdt_descriptor:
    dw gdt_end - gdt_start - 1
    dd gdt_start; 注意这里必须是物理地址!

gdt_start:
    ; GDT表项...
gdt_end:


遇到具体代码可贴出来进一步分析~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

xlt201314 发表于 2025-4-18 20:47:18

FishC 发表于 2025-4-18 20:09
GDTR基地址为0的可能原因及解决方法

若使用 lgdt 指令后GDTR基地址仍为0,常见原因如下:


麻烦帮我看看代码有没有问题
页: [1]
查看完整版本: GDTR加载的问题