我只是想知道,因为我有这样的C代码:关闭堆栈保护
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fillBuffer(int argc, char *argv[]) {
char bufferA[4] = "aaa";
char bufferB[4] = "bbb";
if(argc > 1)
strcpy(bufferB, argv[1]);
printf("bufferA: %s\n", bufferA);
printf("bufferB: %s\n", bufferB);
return 0;
}
int main(int argc, char *argv[]) {
fillBuffer(argc, argv);
return 0;
}
,我试图通过关闭堆栈保护:-fno-堆栈保护
当我尝试做运行它:./program(escape)键5F,节目输出到:
缓冲液A:F
bufferB:FFFFF
我只是不确定bufferA是如何变成f的。任何人都可以向我解释这个吗?
你确定'argv [1]'是'3'个字符吗?... – LPs
未定义的行为,任何事情都可能发生。这只是一种可能性。 –
c代码刚刚给我们作为例子 –