Questions tagged «buffer-overflow»

14
为什么此for循环在某些平台上而不在其他平台上退出?
我最近开始学习C,并且正在上一门以C为主题的课程。我目前正在玩循环,并且遇到了一些奇怪的行为,我不知道该如何解释。 #include <stdio.h> int main() { int array[10],i; for (i = 0; i <=10 ; i++) { array[i]=0; /*code should never terminate*/ printf("test \n"); } printf("%d \n", sizeof(array)/sizeof(int)); return 0; } 在运行Ubuntu 14.04的笔记本电脑上,此代码未中断。它运行到完成。在我学校的运行CentOS 6.6的计算机上,它也可以正常运行。在Windows 8.1上,循环永远不会终止。 更奇怪的是,当我将for循环条件编辑为:时i <= 11,代码仅在运行Ubuntu的笔记本电脑上终止。它永远不会在CentOS和Windows中终止。 谁能解释内存中发生了什么,以及为什么运行相同代码的不同OS会产生不同的结果? 编辑:我知道for循环超出范围。我是故意的 我只是无法弄清楚在不同的操作系统和计算机上行为如何不同。

11
为什么gets功能如此危险以至不应该使用它?
当我尝试gets()通过GCC 编译使用该函数的C代码时,收到以下警告: (.text + 0x34):警告:“ gets”功能很危险,不应使用。 我记得这与堆栈保护和安全性有关,但是我不确定为什么。 如何删除此警告,为什么会有这样的使用警告gets()? 如果gets()是如此危险,那我们为什么不能将其删除?
229 c  fgets  buffer-overflow  gets 

5
为什么此代码容易受到缓冲区溢出攻击?
int func(char* str) { char buffer[100]; unsigned short len = strlen(str); if(len >= 100) { return (-1); } strncpy(buffer,str,strlen(str)); return 0; } 这段代码很容易受到缓冲区溢出攻击,因此我试图找出原因。我认为这与len被声明为a short而不是a 有关int,但我不确定。 有任何想法吗?


10
为什么要使用strncpy而不是strcpy?
编辑:我已经为示例添加了源。 我遇到了这个例子: char source[MAX] = "123456789"; char source1[MAX] = "123456789"; char destination[MAX] = "abcdefg"; char destination1[MAX] = "abcdefg"; char *return_string; int index = 5; /* This is how strcpy works */ printf("destination is originally = '%s'\n", destination); return_string = strcpy(destination, source); printf("after strcpy, dest becomes '%s'\n\n", destination); /* This is …

6
如何防止scanf导致C中的缓冲区溢出?
我使用以下代码: while ( scanf("%s", buf) == 1 ){ 防止缓冲区溢出以使其可以传递随机长度的字符串的最佳方法是什么? 我知道我可以通过调用例如来限制输入字符串: while ( scanf("%20s", buf) == 1 ){ 但是我更希望能够处理用户输入的任何内容。还是不能使用scanf安全地完成此操作,而我应该使用fgets?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.