아마도 그것은 어떻게 든 메모리와 관련이 있습니까? 어떤 것
sudo cat /dev/urandom > /dev/mem
하다? 모든 RAM을 삭제 하시겠습니까? 커널이 아닌 모든 가상 메모리? 위의 어느 것도?
아마도 그것은 어떻게 든 메모리와 관련이 있습니까? 어떤 것
sudo cat /dev/urandom > /dev/mem
하다? 모든 RAM을 삭제 하시겠습니까? 커널이 아닌 모든 가상 메모리? 위의 어느 것도?
답변:
시스템의 실제 메모리에 대한 액세스를 제공합니다.
mem(4)
매뉴얼 페이지 에 대한 자세한 설명 /dev/mem
입니다.
예. 모든 종류의 문제가 발생할 수 있습니다. 재부팅하면 문제가 해결되지만 나쁜 일이 매우 쉽게 발생할 수 있습니다. 조심해! :-)
sudo cat /dev/urandom > /dev/mem
sudo는 고양이의 권한을 높이지만 리디렉션은하지 않기 때문에 아무것도하지 않습니다. 당신도 할 수있는 sudo su
루트 쉘에서 다음 작업 또는 사용
sudo dd if=/dev/urandom of=/dev/mem
/dev/mem
실제 메모리, 즉 시스템의 모든 RAM에 대한 액세스를 제공하지만 이것이 RAM에 대한 전체 읽기 / 쓰기 액세스를 제공한다는 의미는 아닙니다 ( 이 문서의 CONFIG_STRICT_DEVMEM 옵션 참조 ). 또한 실제 메모리의 일부 영역에는 비디오 카드 메모리 등과 같은 다른 장치가 매핑되어 있습니다.
맹목적으로 글을 쓰는 /dev/mem
것은 불확실한 행동을 초래할 것입니다. 여기 YouTube 동영상도 마찬가지입니다.
그것으로 테스트 busybox devmem
busybox devmem
mmaps 작은 CLI 유틸리티입니다 /dev/mem
.
우분투에서 다음을 얻을 수 있습니다. sudo apt-get install busybox
사용법 : 실제 주소에서 4 바이트를 읽습니다 0x12345678
.
sudo busybox devmem 0x12345678
0x9abcdef0
그 주소에 쓰십시오 :
sudo busybox devmem 0x12345678 w 0x9abcdef0
출처 : https://github.com/mirror/busybox/blob/1_27_2/miscutils/devmem.c#L85
MAP_SHARED
mmapping 할 때 /dev/mem
다음을 사용하려고합니다.
open("/dev/mem", O_RDWR | O_SYNC);
mmap(..., PROT_READ | PROT_WRITE, MAP_SHARED, ...)
MAP_SHARED
쓰기는 물리적 메모리로 즉시 이동하므로 관찰하기가 쉬워지고 하드웨어 레지스터 쓰기에 더 적합합니다.
CONFIG_STRICT_DEVMEM
과 nopat
/dev/mem
커널 v4.9에서 일반 RAM을보고 수정 하려면 다음을 수행해야합니다.
CONFIG_STRICT_DEVMEM
(우분투 17.04에서 기본적으로 설정)nopat
x86에 대한 커널 명령 행 옵션 전달IO 포트는 여전히 포트없이 작동합니다.
캐시 플러싱
레지스터 대신 RAM에 쓰려고하면 CPU가 메모리를 캐시 할 수 있습니다. https://stackoverflow.com/questions/22701352/how-to-flush-the-cpu-cache-for-a-region -어드레스-공간-리눅스 에서 나는 그것을 플러시하거나 리전을 캐시 할 수없는 것으로 표시하는 매우 휴대용 / 쉬운 방법을 보지 못한다 :
따라서 /dev/mem
메모리 버퍼를 장치에 전달하는 데 안정적으로 사용할 수 없습니까?
QEMU는 캐시를 시뮬레이트하지 않기 때문에 불행히도 QEMU에서 관찰 할 수 없습니다.
그것을 테스트하는 방법
이제 재미있는 부분입니다. 다음은 몇 가지 멋진 설정입니다.
volatile
유저 랜드 프로세스에 변수 할당/proc/<pid>/maps
+로 실제 주소를 얻습니다/proc/<pid>/pagemap
devmem2
하고 userland 프로세스가 다음과 같이 반응하는지 확인하십시오.kmalloc
virt_to_phys
userland에 다시 전달하십시오.devmem2
devmem2
레지스터에 쓰는 데 사용printf
응답으로 가상 장치에서 시계 가 나옴/ dev / mem은 전통적으로 전체 물리적 주소 공간에 대한 액세스를 제공했습니다. 여기에는 램이 포함되지만 메모리 매핑 IO 장치도 포함됩니다.
많은 최신 커널이 "CONFIG_STRICT_DEVMEM"으로 구성되어 / dev / mem이 메모리 매핑 IO 장치로만 제한됩니다.
랜덤 쓰레기를 쓰는 것은 나쁜 생각이지만 정확히 어떤 나쁜 일이 일어날지는 예측하기 어렵습니다. 하드웨어는 임의의 가비지에 대해 예측할 수없는 방식으로 응답 할 수 있으며, 손상된 커널 메모리 구조는 예측할 수없는 커널 동작을 유발할 수 있습니다. 기껏해야 시스템 충돌, 최악의 데이터 손상 또는 하드웨어 브릭 킹에 대해서는 의문의 여지가 없습니다.
추신 : sudo는 리디렉션이 아닌 cat 명령 만 제거하기 때문에 일반 사용자로 실행할 때 명령을 수행하면 안됩니다.
dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM