什么是`x / 24x $ esp`是什么意思?

时间:2018-01-24 16:51:41

标签: assembly memory operating-system stack xv6

我正在运行xv6 - 由麻省理工学院制作的操作系统。我正在运行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

我找到了谷歌的一些参考资料:

  

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

1 个答案:

答案 0 :(得分:2)

这是一个gdb命令,表示在十六进制堆栈顶部显示(e x 胺)24个单词。

可以看到当前函数的返回地址,堆栈帧指针,函数参数和局部变量。

哦,我明白了:你可能不熟悉堆栈。

在99%的处理器上,堆栈增长(朝向编号较低的内存),与数组相反。请参阅有助于包含此图表的this articleenter image description here

值得花几个小时阅读和理解。堆栈在计算中非常非常重要。