/dev/mem에 액세스하면 Ubuntu가 정지됩니다.

/dev/mem에 액세스하면 Ubuntu가 정지됩니다.

저는 사용자 정의 커널(4.2.0-36-generic)과 함께 최신 Ubuntu Linux를 사용하고 있는데, CONFIG_STRICT_DEVNEM프로젝트 중에 메모리에서 일부 용어를 덤프하고 검색해야 하기 때문에 비활성화했습니다.

그러나 다음을 사용하는 경우:

  • dd if=/dev/mem화면에 인쇄하고,
  • dd if=/dev/mem of=/home/user/Documents/file.dump파일로 저장하시거나
  • dd if=/dev/mem | hexdump -C | grep 'term'내가 원하는 것을 직접 찾아보세요.

이 프로세스 중에 시스템이 정지되고 재부팅됩니다.

확인해 보니 df -h디스크에 여유 공간이 충분합니다. 또한 8Gb RAM에서 2.1Gb를 2.5Gb로 쓴 후 프로세스는 항상 4로 시작하는 주소에 도달하기 전에 정지됩니다(차이가 있는 경우). 또한, 동결 전 확인은 /var/log/syslog관련 정보 없이 표시됩니다./var/log/kern.log

또한 매개변수를 사용하면 bs=1G count=2처음 2GB의 메모리를 성공적으로 복사했지만 bs=1G count=2 skip=2다음 2GB를 다시 가져오려고 하면 시스템이 정지됩니다.

전체 메모리를 덤프할 수 있는 솔루션이나 메모리에서 직접 용어를 검색할 수 있는 다른 방법을 제안해 주시겠습니까?

답변1

PCI/ACPI 또는 일부 하드웨어에서 사용되는 일부 메모리 영역을 실행하고 있을 수 있다고 생각합니다. 액세스를 원하지 않는 메모리 매핑 장치가 있을 수 있습니다. 어떤 주소가 문제를 일으키는지 정확히 알 수는 없지만 일부 특수 영역은 일반적으로 4GB 제한에 속합니다.

4GB RAM이 있는 시스템에서 커널은 시작 시 다음을 인쇄합니다.

BIOS-e820: 0000000000000000 - 000000000009e400 (usable)
BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf690000 (usable)
BIOS-e820: 00000000cf690000 - 00000000cf6e0000 (reserved)
BIOS-e820: 00000000cf6e0000 - 00000000cf6e3000 (ACPI NVS)
BIOS-e820: 00000000cf6e3000 - 00000000cf6f0000 (ACPI data)
BIOS-e820: 00000000cf6f0000 - 00000000cf700000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)

사용 가능한 메모리 중 일부가 4GB 제한을 초과하며, 0x100000000사이에 취약점이 있는 것으로 보입니다.0xcf7000000xfec00000

"사용 가능한" 메모리에 해당하는 영역도 /proc/iomem"시스템 RAM"이라는 라벨로 표시됩니다. (파일에는 다른 메모리 영역에 대한 정보도 포함되어 있습니다.) 이러한 영역에서만 읽는 것이 더 안전할 수 있습니다.

$ grep "System RAM" /proc/iomem 
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM

관련 정보