<分区>
我对局部变量在堆栈上的排序方式感到很困惑。我知道,(在 Intel x86 上)局部变量在代码中从高地址存储到低地址。很明显,这段代码:
int i = 0;
char buffer[4];
strcpy(buffer, "aaaaaaaaaaaaaaa");
printf("%d", i);
产生这样的东西:
1633771873
i
变量被溢出的缓冲区覆盖。
但是,如果我交换前两行:
char buffer[4];
int i = 0;
strcpy(buffer, "aaaaaaaaaaaaaaa");
printf("%d", i);
输出完全相同。
这怎么可能? i
的地址低于 buffer
的地址,因此缓冲区溢出应该会覆盖其他数据,但不会覆盖 i
。还是我遗漏了什么?