`x/24x $esp` 是啥意思?

Posted

技术标签:

【中文标题】`x/24x $esp` 是啥意思?【英文标题】:What is `x/24x $esp` mean?`x/24x $esp` 是什么意思? 【发布时间】: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

【问题讨论】:

这似乎是您的教授使用的某种个人符号。所以最好问问他。 您是否尝试过查看文档?你的教授在哪个程序中输入了这个? 嗯,我以为这就像基本的终端命令 参考: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 命令是如何工作的。 【参考方案1】:

这是一个gdb 命令,它表示在堆栈顶部以十六进制显示 (examine) 24 个字。

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


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

在 99% 的处理器上,堆栈会向上增长(朝向编号较小的内存),与数组相反。请参阅this article,其中包含此图表很有帮助:

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

【讨论】:

实际上默认情况下,当没有给出(或可用)类型信息时,在 x86 GDB 上默认显示 DWORD(32 位值),而不是 16 位 WORD @MichaelPetch: WORDDWORD 是 Microsoft 特定的概念。我很少说Microsoft。计算机字由体系结构指定。在 32 位机器上,它是 32 位。在 64 位机器上,一个字是 64 位。 如果我已经知道架构字大小不是 GDB 默认在指定内存位置显示数据的方式,我不会发表评论。 x86/x86-64 目标上的 GDB 不使用架构字大小来显示内存中的数据(除非被覆盖)。 OP:"stack" 是普通内存,和其他内存一样,"stack" 魔法是通过为此目的保留一些内存区域来创建的,并将esp 设置为指向该区域的末尾, 并让隐含地使用 esp 指针 (push/pop/call/ret/leave/...) 的专用指令使用该保留区域。通过x.. $esp gdb 命令,教授确实在“堆栈顶部”检查了该内存区域的内容,并且进一步,即在您的Q 中,第一个双字0x00007db4 将是由pop eax 加载到eax 中的值.在pop 之后,esp 将是+= 4,指向0x7BE0 地址。 @wallyk 不,它没有。 gdb 默认为最近使用的大小。诚然,在启动时可能是word。但是,如果您之前检查过不同尺寸的东西,您将再次获得该尺寸。

以上是关于`x/24x $esp` 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

lea 0x4(%esp),%ecx 在 AT&T 语法中是啥意思?

买单反相机的APS画幅 ,APS -P 、APS -H 、APS-C是啥意思?

MSVC 内联汇编中的“拒绝”是啥意思

玩转 ESP32 + Arduino (十一) EEPROM NTP对时 蓝牙透传

“#define X X”是啥意思?

安卓5.x是啥意思