gpt4 book ai didi

c - 在使用mmap的Linux上分配地址零失败

转载 作者:行者123 更新时间:2023-12-03 10:00:19 25 4
gpt4 key购买 nike

我正在为Linux编写一个静态程序加载器,正在阅读ELF程序头并将这些段映射到内存。
我遇到了一个可执行文件,该文件假定其第一段的虚拟地址为0。我的内存映射失败,在地址0处分配虚拟页面时出错。
我想知道是否有可能在用户空间的0地址处分配所有内存。
请参见以下示例代码:

/*mmaptests.c*/
#include <sys/mman.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

int main()
{
void* p = mmap(0, sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
printf("mmap result %p (errno %s)\n",p,strerror(errno));
return 0;
}
我用它编译:
gcc mmaptests.c
这是它返回的内容:
$./a.out
mmap result 0xffffffffffffffff (errno Operation not permitted)
我将很高兴为您提供任何见解。
谢谢

最佳答案

如果有特权,Linux只会让您对第0页进行mmap

gcc mmaptests.c && sudo ./a.out
应该给你:
mmap result (nil) (errno Success)

关于c - 在使用mmap的Linux上分配地址零失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63790813/

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