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

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

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

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

  • 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 메모리가 있는 한 시스템에서 커널은 부팅 시 다음을 인쇄합니다.

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

관련 정보