gpt4 book ai didi

c - 如何将 mmap() 64 位地址转换为 32 位进程?

转载 作者:行者123 更新时间:2023-12-04 12:20:01 25 4
gpt4 key购买 nike

我正在尝试将驻留在 64 位地址上的设备内存映射到 64 位操作系统上的 32 位进程。
我正在使用以下几行

baseaddr = addr & ~(sysconf(_SC_PAGE_SIZE) - 1);
fd = open("/dev/mem", O_RDONLY | O_SYNC);
base_ptr = mmap(0, 4096, PROT_READ, MAP_PRIVATE, fd, baseaddr);

baseaddr 是 uint64_t 并且大于 4GB。

我用 -D_FILE_OFFSET_BITS=64 编译.
当我运行程序时,它返回 EINVAL .
以前没有 -D_FILE_OFFSET_BITS=64 也能用,但它只使用 baseaddr 的低 32 位 - 我通过 pmap -d 的输出得出结论,显示我想要的地址的低 32 位。

任何想法我做错了什么?

最佳答案

您应该使用 mmap64这里。地址必须映射到 32 位进程可以使用的区域。但是,我强烈建议您获得此应用程序的真正 64 位版本。你正朝着这里的一个兔子洞前进,那个洞里有很多兔子便便,如果你注意到我的漂移......

关于c - 如何将 mmap() 64 位地址转换为 32 位进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59649038/

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