gpt4 book ai didi

c - 有符号和无符号变量的混合

转载 作者:行者123 更新时间:2023-11-30 18:58:00 25 4
gpt4 key购买 nike

我尝试下面的示例来找出 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();
}

最佳答案

read 的第三个参数是 size_t,它是无符号的。 -1 在 32 位机器上编码为 0xFFFFFFFF(或在极少数机器上为 0xFFFFFFFE)。当您将一个“小”负整数传递给一个无符号整数时,您将得到一个非常大的值。这些行是等效的

read(fd,buffer,-1);

read(fd,buffer,(unsigned long)-1);

read(fd,buffer,0xFFFFFFFF);

关于c - 有符号和无符号变量的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com