【问题标题】:Can I print the gdtr and gdt descriptor under gdb?我可以在 gdb 下打印 gdtr 和 gdt 描述符吗?
【发布时间】:2015-02-01 22:29:17
【问题描述】:
I want to use gdb to see my GDTR/LDTR/TTR and segment register

不可见部分(x86) 所以在 gdb 中我输入“p/x $gdtr”....等 但结果是“$6 = 值不能转换为整数” 在 gdb 中我输入“p/x $cs” 唯一的结果是 CS,只是可见的部分

can anyone tell me how to view these value??

谢谢你的回答

【问题讨论】:

  • 我认为你做不到。

标签: assembly linux-kernel x86 gdb gdt


【解决方案1】:

如果 GDB 有这样的功能,那么这个功能只有在 GDB 能够使用 SGDT 指令读取 GDTR 时才能工作。这意味着 GDB 必须在环 0 中运行。

Linux、Windows 和 Mac OS 都不允许在 ring 0 中运行应用程序(如 GDB),因此它不适用于本地应用程序。

如果您使用远程调试(您使用 RS-232 或 TCP/IP 连接调试另一台计算机或虚拟机):用于远程调试的默认协议未指定用于读取 GDTR 的数据包。

在远程调试的情况下,后端(被调试计算机上的一段代码)可以使用“monitor”命令定义非标准功能。您可以使用“monitor readspr gdtr”之类的命令来实现这样的功能。

【讨论】:

  • 但是没有什么禁止系统调用来读取 GDT,就像有一个访问 LDT 一样。 gdb 不需要为此在 ring0 中运行,它可以只使用系统调用。因此,您的第一段无效。
  • 这是正确的;但是我认为任何操作系统都不会提供这样的系统调用。从理论上讲,您可以编写内核驱动程序(例如用于 Linux),这样您就可以通过 /dev/gdtread 读取 GDT...但是我认为没有人会实现这些功能!
猜你喜欢
  • 1970-01-01
  • 2016-10-24
  • 2021-01-15
  • 2016-08-06
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多