我在下面尝试了这个示例,以找出 C 中由于有符号和无符号数字混合导致的安全问题。
在下面的代码中,由于长度为负值,我无法理解此处的损坏是如何发生的。
read() 将尝试读取文件的 loc -1。因此是否存在溢出:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
int fd;
int get_length(){
fd = open("hello.txt",O_RDWR);
return -1;
}
int read_data(){
int length,n;
char buffer[1024];
printf("\n read_data() \n");
length = get_length();
if(length > 1024){
perror("\n Big file! \n");
return 0;
}
//printf("\n %d \n",length);
read(fd,buffer,length);
printf("\n %s \n",buffer);
return length;
}
int main(){
read_data();
}