0

我想在用户空间程序中写一些东西,例如:将值3从起始地址写入物理地址,而所有内核都在 0-240MB 范围内。我该怎么做?有什么想法吗?0xF7F4900(260MB)0x0

此致。

我想使用 mmap 但我认为它可以让我获得虚拟地址。

memfd = open("/dev/mem", O_RDWR);
map = mmap(0xF7F4900, sizeof(int), PROT_WRITE, MAP_SHARED, memfd, 0);
*map = 3;
4

2 回答 2

0

视为/dev/mem文件并写入0xF7F4900该文件中的偏移量:

char value = 3;
int fd = open("/dev/mem", O_RDWR);
lseek(fd, 0xF7F4900, SEEK_SET);
write(fd, &value, 1);
close(fd);

如果你愿意mmap,同样的事情也适用。您不应尝试将其映射到0xF7F4900进程中,而应将其映射到任意位置并写入,map[0xF7F4900]如果您从偏移量 0map[0x900]映射或从页面边界映射0xF7F4000

请注意,任意访问/dev/mem可能需要特殊的内核配置,并且通过 UEFI 安全启动完全禁用。

于 2019-10-06T22:50:40.350 回答
-4

这在大多数操作系统中是不可能的,因为您可以控制系统。数千个漏洞中的一个

于 2019-10-06T14:01:14.017 回答