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

hel*_*eer 5 memory assembly stack operating-system xv6

我正在运行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
Run Code Online (Sandbox Code Playgroud)

我从谷歌找到了一些参考:

x/6x $esp 以查看 int 放入堆栈中的内容。

(gdb) x/6x $esp
0x7bdc: 0x00007db4  0x00000000  0x00000000  0x00000000
0x7bec: 0x00000000  0x00000000
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义。

PS此时我需要找到堆栈的开头和堆栈上的项目。(一旦我理解了这个命令!)

参考:https : //pdos.csail.mit.edu/6.828/2012/lec/l-interrupt.html

wal*_*lyk 5

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

这样做是为了查看当前函数的返回地址、堆栈帧指针、函数参数和局部变量。


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

在所有处理器的 99% 上,堆栈增长(朝向编号较低的内存),与数组相反。请参阅这篇文章,其中包含此图表: 在此处输入图片说明

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

  • @wallyk 不,不是。gdb 默认为最近使用的大小。诚然,在启动时可能是“word”。但是如果您之前检查过不同尺寸的东西,您将再次获得该尺寸。 (2认同)