You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GDB examine命令读取值与直接从同地址加载的值不一致的问题求助

GDB examine命令读取值与直接从同地址加载的值不一致的问题求助

各位大佬好,最近我在给自己的操作系统实现PCIe设备检测逻辑:遍历所有存在的PCIe设备函数,把它们配置空间的物理地址保存到预先分配的内存中。

用QEMU虚拟机测试时,我发现保存的地址数量远超出预期,明显是代码没正确过滤掉不存在的PCIe函数。于是用GDB挂载调试,结果碰到了一个特别诡异的问题:

我把指向PCIe厂商ID(Vendor ID)的物理地址存在RDX寄存器里,现在两种操作得到的结果完全不一致:

  • 代码里通过mov eax, [rdx]直接从这个地址加载值到EAX,得到的是无效数值(比如全0或者无意义的随机值)
  • 但在GDB里用x/wx $rdx命令查看同一个地址,得到的却是QEMU模拟设备的合理厂商ID值

我反复确认过,执行这两个操作的间隙,RDX里的地址根本没被修改过,完全是同一个物理地址。现在彻底搞不懂原因了,有没有大佬遇到过类似情况?或者能给我一些排查方向?

补充几个可能相关的细节:

  • 我的OS还在早期阶段,目前未开启分页,全程使用物理地址访问
  • QEMU版本是7.2.0,GDB版本是12.1,调试的是x86_64架构内核
  • 我采用内存映射(MMIO)方式访问PCIe配置空间,而非传统IO端口方式

火山引擎 最新活动