【发布时间】:2020-02-04 01:26:56
【问题描述】:
我想在用户空间程序中写一些东西,例如:从起始地址0x0开始在物理地址0xF7F4900(260MB)中写入值3,而所有内核都位于范围0内-240MB。
我该怎么做?请问有什么办法吗?
最好的问候。
我想使用 mmap,但我认为它可以让我获得虚拟地址。
memfd = open("/dev/mem", O_RDWR);
map = mmap(0xF7F4900, sizeof(int), PROT_WRITE, MAP_SHARED, memfd, 0);
*map = 3;
【问题讨论】:
-
*((int*)0xF7F4900) = 3;工作吗? -
@pmg 是的,但是这个地址是虚拟地址,不是吗?
-
@jww 好吧,假设我会这样做,我怎么知道值是写在物理地址中的?
-
我不知道内核模式(或其他所谓的)内存访问是如何工作的