我给了一个实际地址,特别是0x000000368d76c0
。我正试图mmap
进入我的程序。我正在使用的代码是
void *mmap64;
off_t offset = 0x000000368d76c0;
int memFd = open("/dev/mem", O_RDWR);
if (-1 == memFd)
perror("Error ");
mmap64 = mmap(0, sizeof(uint64_t), PROT_WRITE | PROT_READ, MAP_SHARED, memFd, offset);
if (MAP_FAILED == mmap64) {
perror("Error ");
return -1;
}
由于某种原因,当我运行此代码时,我在mmap
上失败了。具体来说它是Error Invalid argument
。我很确定这是因为offset
值,但我不知道它有什么问题。
我很感激任何帮助。
答案 0 :(得分:3)
根据mmap(2) - Linux manual page,
offset
必须是页面大小的倍数 由sysconf(_SC_PAGE_SIZE)
返回。
当页面大小为4096(x86 CPU中使用的页面大小)时,0x000000368d76c0
不是4096的倍数,将被视为无效。
因此,您必须调整偏移量。