`x/24x $esp` 是什么意思?
What is `x/24x $esp` mean?
我是 运行 xv6
- MIT 开发的操作系统。我是 运行 gdb 来检查堆栈指针(?)。而我运行gdb
查看堆栈指针寄存器的值。
我的教授说 "Let's look at the stack" 然后输入 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 in order to see what int put on the stack.
(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
这是一个 gdb
命令,表示在堆栈顶部以十六进制显示 (examine) 24 个字。
这样做是为了查看当前函数的 return 地址、栈帧指针、函数参数和局部变量。
哦,我明白了:你可能对堆栈不熟悉。
在 99% 的处理器上,堆栈会向上增长(朝向编号较低的内存),与数组相反。请参阅 this article,其中包含此图表:
这值得花几个小时阅读和理解。堆栈在计算中极其重要。
我是 运行 xv6
- MIT 开发的操作系统。我是 运行 gdb 来检查堆栈指针(?)。而我运行gdb
查看堆栈指针寄存器的值。
我的教授说 "Let's look at the stack" 然后输入 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 in order to see what int put on the stack.
(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
这是一个 gdb
命令,表示在堆栈顶部以十六进制显示 (examine) 24 个字。
这样做是为了查看当前函数的 return 地址、栈帧指针、函数参数和局部变量。
哦,我明白了:你可能对堆栈不熟悉。
在 99% 的处理器上,堆栈会向上增长(朝向编号较低的内存),与数组相反。请参阅 this article,其中包含此图表:
这值得花几个小时阅读和理解。堆栈在计算中极其重要。