gpt4 book ai didi

linux - mmap()之后,写入返回地址可以,但是读取会导致系统崩溃。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:21 26 4
gpt4 key购买 nike

我想在两个进程之间共享内存。
mmap() 之后,我得到一个地址 mapStart,然后向 mapStart 添加偏移量并获取 mapAddr,并确保 mapAddr 不会超过映射的 PAGE_SIZE。
当我通过

写入 mapAddr
memcpy((void *)mapAddr, data, size);

一切都好。

但是当我从 mapAddr 读取

memcpy( &data, (void *)mapAddr, size);` 

这会导致系统崩溃。
谁知道为什么? The similar problem is here

添加一些信息:@Tony Delroy、@J-16 SDiZ
mmap函数是:

mapStart = (void volatile *)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, memfd, pa_base);

系统崩溃:没有任何操作系统错误消息,控制台打印一些MCA信息

here中描述的详细信息

最佳答案

只是一些想法。

您的 mmap() 是否跨越具有不同属性的内存区域?这是非法的。较旧的内核(您说的是 2.6.18)允许这样做,但是当您写入其中的某些内容时会崩溃。

参见this post一些起点。如果可能,请尝试更新的内核。

关于linux - mmap()之后,写入返回地址可以,但是读取会导致系统崩溃。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290146/

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