簡體   English   中英

在特定物理地址處硬編碼寫入 RAM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM