Bufferoverflow,snprintf代替char调整大小?

时间:2019-04-19 02:33:48

标签: c printf buffer-overflow

我很难理解下面的代码为什么没有导致缓冲区溢出,而是有些如何将char示例的大小从1调整为16。

我检查了snprintf文档,但对此一无所获。

//set char example size 1
char example[1];

//set example to args->arg2 which is a 15 character + 1 null byte.
//trying to put something to big into something too small, in my mind causing not a resize but a bof.

snprintf(example, 16, "%s", args->arg2); 

fprintf(stdout,"[%s],example);

fprintf最后不显示1个字符,也不显示char示例溢出,而是似乎已被调整大小并显示完整的字符串16。

我在这里误会什么?

1 个答案:

答案 0 :(得分:1)

您的数组未调整大小。相反,发生的是 之后有一些内存(实际上这是您的调用堆栈,这就是为什么这样的溢出很危险的原因),并且snprintf“信任”您并将其写入记忆。之后,fprintf会愉快地读取在那里写的snprintf

它现在对您有效,但是它是未定义的行为,这意味着它迟早会崩溃。