gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:15:55 26 4
gpt4 key购买 nike

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

致以诚挚的问候。

我想使用 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 安全启动完全禁用。

关于c - 将硬编码写入 RAM 的特定物理地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58257884/

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