开发者社区 问答 正文

将硬编码写入特定物理地址的RAM

我想在用户空间程序中编写一些内容,例如:从起始地址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;

展开
收起
祖安文状元 2020-01-07 14:02:48 393 分享 版权
1 条回答
写回答
取消 提交回答
  • 治疗/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],如果你从偏移0映射或者map[0x900]如果从页边界地图0xF7F4000。

    请注意,对任意访问的访问/dev/mem可能需要特殊的内核配置,并且完全被UEFI Secure boot禁用。

    2020-01-07 14:11:42
    赞同 展开评论
问答地址: