我正在尝试了解堆栈的工作原理,因此我编写了一个非常简单的 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 在哪里?任何人都可以看看我的截图并帮助我做出正面或反面吗?
谢谢!