【发布时间】:2017-04-08 23:58:17
【问题描述】:
我试图在 C 中的 strcmp 函数中演示缓冲区溢出。
我有strcpyV.c 文件:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char a[8];
char b[8];
// function causes buffer overflow
strcpy(b, "01234567");
// buffer overflow again
strcpy(a, "89abcdef");
printf("\nb = %s\n", b);
return 0;
}
我使用 gcc 编译器编译这个程序。
gcc -o strcpyV strcpyV.c
当我在 raspberry py B+ (Raspbian wheezy) 中执行此操作并运行时:
./strcpyV
我得到了预期的结果:
b = 0123456789abcdef
但是当我在 Ubuntu 16.04 中执行这整个过程时,结果是:
b = 01234567
有没有办法在没有这种内存保护的情况下编译代码?
【问题讨论】:
-
变量的布局由编译器决定。无论如何,这是未定义的行为。
-
但是当我在 Raspberry 上执行此操作时……就像我写的那样
-
未定义行为包括预期行为。
-
没有未定义行为的预期结果,抱歉。
-
@MichaelWalz:不包括! :)