Assembly 如何移动?

Assembly 如何移动?,assembly,x86,gdb,stack,stack-pointer,Assembly,X86,Gdb,Stack,Stack Pointer,我有一段代码如下: #include<stdio.h> main() { xxx(1234); } int xxx(int b) { int c; c=b; return c; } #包括 main() { xxx(1234); } 内部xxx(内部b) { INTC; c=b; 返回c; } 我使用gdb通过在xxx(1234)处设置断点来显示ESP寄存器的值以及它是如何工作的和c=b行 运行程序并在第一个断点处停止,使用i r esp和x/x$es

我有一段代码如下:

#include<stdio.h>

main()
{
   xxx(1234);
}

int xxx(int b)
{
   int c;
   c=b;
   return c;
}
#包括
main()
{
xxx(1234);
}
内部xxx(内部b)
{
INTC;
c=b;
返回c;
}
我使用gdb通过在
xxx(1234)处设置断点来显示ESP寄存器的值以及它是如何工作的
c=b

运行程序并在第一个断点处停止,使用
i r esp
x/x$esp
。它显示esp指向eg:0xBBBBFFF,该地址包含一个杂项值,例如:0xbb33bb33。继续到第二个断点,我重复上面的两个命令,检查地址0xBBBBFFF处的值,它显示0x000004d2(十进制1234)

我知道ESP指向堆栈的顶部,若我们将一个值推入堆栈,它会移动到较低的地址,并将该值放入该地址的内存中。例如,如果在第一个断点处ESP指向地址0xBBBBFFF,那么在第二个断点处ESP必须指向类似于0xBBBBFFF-4=0xBBBBBBFFA的某个位置并包含0x000004d2,而0xBBBBFFF处的内存仍然包含0xbb33bb33。但我在gdb中看到0x000004d2值包含在0xBBBBFFF(调用xxx函数之前的上一个顶层堆栈)中

我对堆栈的理解有误吗?

可能重复的堆栈可能重复的堆栈