[英]write hard-codded to RAM at specific physical-address
我想在用戶空間程序中寫一些東西,例如:將值3
從起始地址0x0
寫入物理地址0xF7F4900(260MB)
,而所有 kernel 都位於 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
,同樣的事情也適用。 You should not try to map it to 0xF7F4900
in your process, you should instead map it to an arbitrary location and write to map[0xF7F4900]
if you map from offset 0 or map[0x900]
if you map from the page boundary 0xF7F4000
.
請注意,對/dev/mem
的任意訪問可能需要特殊的 kernel 配置,並且通過 UEFI 安全啟動完全禁用。
這在大多數操作系統中是不可能的,因為您可以控制系統。 數千個漏洞中的一個
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.