我想在用户空间程序中编写一些内容,例如:从起始地址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;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
治疗/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禁用。