鱼C论坛

 找回密码
 立即注册
查看: 128|回复: 2

GDTR加载的问题

[复制链接]
发表于 2025-4-18 20:07:27 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为啥GDTR加载完了基地址是0;是在bochs里加载的,不知道是写错了还是什么?求助!
Image_16752267113556.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-18 20:09:14 | 显示全部楼层
GDTR基地址为0的可能原因及解决方法

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

  • 数据结构错误
    GDTR加载数据应为:

    1. gdt_ptr:
    2.     dw gdt_end - gdt_start - 1  ; 界限
    3.     dd gdt_start                 ; 基地址(32位系统)
    复制代码

    常见错误是:
    - 基地址和界限顺序颠倒
    - 忘记用 dd 存储基地址
    - 未正确计算GDT物理地址(实模式下需 段地址<<4 + 偏移
  • 未进入保护模式
    GDTR基地址在实模式下可能显示为0(Bochs调试器 info gdt 更可靠)
  • Bochs调试显示延迟
    执行 lgdt 后需执行下条指令才会更新寄存器显示


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


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

  1. lgdt [gdt_descriptor]

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

  5. gdt_start:
  6.     ; GDT表项...
  7. gdt_end:
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-18 20:47:18 From FishC Mobile | 显示全部楼层
FishC 发表于 2025-4-18 20:09
GDTR基地址为0的可能原因及解决方法

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

麻烦帮我看看代码有没有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-8 09:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表