由于缓冲区溢出而覆盖

问题描述 投票:0回答:1
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会消失,为什么会发生?有人能解释清楚吗?

c buffer overflow overwrite
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.