您想要做的基本上是缓冲区溢出&在您的代码示例中,更具体地说是堆溢出。您有时只看到崩溃的原因取决于您正在访问的内存区域以及您是否有权访问/写入它(Dan
Fego对此做了很好的解释)。我认为Dan
Fego提供的示例更多地是关于堆栈溢出(欢迎更正!)。gcc具有与堆栈上的缓冲区溢出(堆栈粉碎)相关的保护。您可以在以下示例中看到此消息(基于堆栈的溢出):
#include <stdio.h>#include <string.h>int main (void){ char b[] = { "abcdefghijk"}; char c [8]; memcpy (c, b, sizeof c + 1); // here invalid read and invalid write printf ("nsize: %dn", sizeof b); printf ("nc: %sn", c); return 0;}样本输出:
$ ./a.outsize: 12c: abcdefghi���*** stack smashing detected ***: ./a.out terminated
可以使用
-fno-stack-protectorgcc中的选项禁用此保护。
缓冲区溢出是导致安全漏洞的主要原因之一。不幸的是,像
memcpy这样的功能不能检查这类问题,但是有一些方法可以防止此类问题。
希望这可以帮助!



