【发布时间】:2018-07-03 19:23:20
【问题描述】:
我正在运行xv6 - 由 MIT 制造的操作系统。我正在运行 gdb 来检查堆栈指针(?)。我正在运行gdb 来查看堆栈指针寄存器的值。
我的教授说“让我们看看堆栈”然后输入x/24x $esp。
问题:什么是x、/、24、$esp??? $esp 只是一个堆栈指针,显示堆栈寄存器的当前地址?
我得到的输出是:
(gdb) x/24x $esp
0x7bdc: 0x00007db4 0x00000000 0x00000000 0x00000000
0x7bec: 0x00000000 0x00000000 0x00000000 0x00000000
0x7bfc: 0x00007c4d 0x8ec031fa 0x8ec08ed8 0xa864e4d0
0x7c0c: 0xb0fa7502 0xe464e6d1 0x7502a864 0xe6dfb0fa
0x7c1c: 0x16010f60 0x200f7c78 0xc88366c0 0xc0220f01
0x7c2c: 0x087c31ea 0x10b86600 0x8ed88e00 0x66d08ec0
我从 Google 找到了一些参考资料:
x/6x $esp 以查看 int 放入堆栈的内容。
(gdb) x/6x $esp
0x7bdc: 0x00007db4 0x00000000 0x00000000 0x00000000
0x7bec: 0x00000000 0x00000000
这对我来说没有意义。
P.S 此时我需要找到堆栈的开头和堆栈上的项目。 (一旦我理解了这个命令!)
参考:https://pdos.csail.mit.edu/6.828/2012/lec/l-interrupt.html
【问题讨论】:
-
这似乎是您的教授使用的某种个人符号。所以最好问问他。
-
您是否尝试过查看文档?你的教授在哪个程序中输入了这个?
-
嗯,我以为这就像基本的终端命令
-
x命令意味着检查内存。/24x表示以 HEX 表示法打印出接下来的 24 个值。默认情况下,对于一般内存查询,默认显示 DWORDS(32 位值)。开始显示的地址指定为$esp。因此,您的命令以十六进制显示 24 个 DWORD 值,从 ESP 寄存器中的地址开始。 (在 GDB 寄存器中需要在前面加上$)。您可以通过 GDB 命令行上的help获得有关说明的帮助。help x会告诉你x命令是如何工作的。
标签: assembly memory operating-system stack xv6