0

我正在尝试了解堆栈的工作原理,因此我编写了一个非常简单的 C 程序来运行 GDB 并检查堆栈:

int main(int argc, char **argv)
{
    char buf[100];
    strcpy(buf, argv[1]);
}

我编译了程序并在 GDB 中为 main() 函数的开头设置了一个断点。我对堆栈在执行过程中应该如何看待的期望是:

较低的内存地址... | ebp = esp = 堆栈帧指针 | 退货地址 | argv | 弧线 | ...更高的内存地址

随着程序的进行,堆栈将向低内存地址的方向增加(为 bur 局部变量分配 100 个字节)

看看 GDB,情况似乎并非如此。

  • 堆栈帧似乎位于 0xbffff048
  • 返回地址似乎是 0xbffff04c
  • 但看起来 argc(值为 2)位于 0xbffff050

argv 在哪里?任何人都可以看看我的截图并帮助我做出正面或反面吗?

谢谢!

GDB运行截图

4

0 回答 0