【发布时间】:2015-02-09 02:15:15
【问题描述】:
假设我有代码:
char* word = malloc (sizeof(char) * 6);
strcpy(word, "hello\0extra");
puts(word);
free(word);
这个编译只是find,Valgrind没有问题,但是真的有问题吗?好像我正在写入我不拥有的记忆。
另外,一个单独的问题,但是当我用类似的东西填满缓冲区时
char* word = malloc (sizeof(char) * 6);
strcpy(word, "1234567\0");
puts(word);
free(word);
它打印出 1234567 并且 Valgrind 确实发现了问题。做这样的事情会有什么后果?它似乎每次都有效。如果这是错误的,请纠正我,但据我了解,另一个程序有可能将内存超过 6 并写入它。如果发生这种情况,打印这个词会永远持续下去,直到遇到一个 nul 字符?在学习 C 字符串时,这个字符让我非常困惑。
【问题讨论】:
-
哦,唯一真正的问题是你会得到一个讨厌的 NASAL DEAMONS 案例。
-
strcpy(word, "hello\0extra");将在第 6 个字符(终止符)之后停止,所以这个人为的例子没有问题。 -
您的第二个问题,
strcpy会将您告诉它的任何内容复制到溢出空间,只要它不会导致段错误。这是否会破坏某些东西,取决于它覆盖了什么。假设它会破坏某些东西。
标签: c buffer-overflow strcpy