为什么 mmap 会失败?

why does mmap fail?

我得到了一个物理地址,特别是 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 值,但我不知道它有什么问题。

如有任何帮助,我将不胜感激。

根据mmap(2) - Linux manual page

offset must be a multiple of the page size as returned by sysconf(_SC_PAGE_SIZE).

当页面大小为4096(x86中使用的页面大小CPU)时,0x000000368d76c0不是4096的倍数,将被视为无效。

因此,您必须调整偏移量。