gpt4 book ai didi

c -/dev/urandom 为 mmap() 提供随机地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:40 25 4
gpt4 key购买 nike

即使我使用的是/dev/urandom,在调用该函数 4 次后,我仍然得到相同的地址位置。这是为什么 ?为什么/dev/urandom 提供的数字非常低或非常高?

1040x7fffb128de780x7f9e3c56500042949671920x7fffb128de780x7f9e3c564000970x7fffb128de780x7f9e3c56300042949671390x7fffb128de780x7f9e3c562000
void test(void){
char random[4];
int filedescriptor = open("/dev/urandom", O_RDONLY);
read(filedescriptor, random, 4);
close(filedescriptor);

unsigned int hintmemoryaddress = (unsigned int)random;
printf("%u\n", hintmemoryaddress);

char *p = (char *)hintmemoryaddress;
p += hintmemoryaddress;
printf("%p\n", &p);

char *x = (char *)mmap((void *)&p, 1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
printf("%p\n", x);
}

int main(void){
test();
test();
test();
test();

return 0;
}

最佳答案

因为您将指针的值与其地址混淆了。您要使用 p,而不是 &p。此外,temp char 数组是无用的,您将其复制到周围都是不正确的。更正后的代码应该是:

void test(void){
void *p;
int filedescriptor = open("/dev/urandom", O_RDONLY);
read(filedescriptor, &p, sizeof p);
close(filedescriptor);

char *x = (char *)mmap(p, 1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
printf("%p\n", x);
}

关于c -/dev/urandom 为 mmap() 提供随机地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253514/

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