由于缓冲区溢出而覆盖

时间:2019-03-05 05:46:58

标签: c buffer overflow overwrite

char A[3] = "AA";
char B[4];

printf("Type : ");
gets(B);

char AB[20];  // just big size
strncpy(AB, A, 3);
strncat(AB, B, 4);

printf("%s", AB);

是的,我知道这是易受攻击的代码(b / c获取)。

如果我键入“ BBB”,则char AB打印“ AABBB”。

如果我键入“ BBBB”,那么char AB打印“ BBBB”

我知道char B溢出。但是,当我在较大的缓冲区中串联A和B时,A消失了,为什么会发生呢?有人可以清楚解释吗?

1 个答案:

答案 0 :(得分:0)

输入"BBBB"占用了内存中的5个字节-四个字母和\ 0终端-变量B扩展到A。然后B的\ 0端子成为A的第一个字节,然后A现在是一个空字符串。将B连接到A中的AB时,结果为B