2015-06-06 2 views
1

Из последних нескольких дней, я пытался понять точное различие между /dev/mem и /dev/kmem устройствами. Из разных источников я узнал только то, что, когда мы пытаемся читать с этих устройств, соответственно называются API read_mem() и read_kmem().Что такое реальное использование устройства/dev/kmem char в linux?

read_mem(): reads the *physical* memory 
read_mem(): reads the *virtual* memory as seen by the kernel. 

Я готов знать, что единственная цель /dev/kmem, в каком сценарии использования мы можем использовать это. regdump - один из примеров, где полезно использовать /dev/mem. Но не удалось найти полезность /dev/kmem.

может кто-то список или поделиться полезной информацией относительно dev/kmem полукокса устройства?

ответ

1

может ли кто-нибудь перечислить или поделиться полезной информацией относительно устройства dev/kmem char?

Устройства /dev/kmem и /dev/mem содержат информацию о вашей оперативной памяти. Но как вы можете прочитать в man kmem:

The file kmem is the same as mem, except that the kernel virtual memory 
rather than physical memory is accessed. 

Это означает, что /dev/kmem обеспечивает ту же информацию, /dev/mem, но как это видно на ядре Linux. Например, если вы Execute выполнить что-то вроде этого:

open("/dev/mem"); 
seek(0); 
read(100); 

Вы прочтете первые 100 байт из адреса памяти 0. В другой форме, если вы будете выполнять:

open("/dev/kmem"); 
seek(0); 
read(100); 

Вы прочтете 100 байт из virtual address - 0, который отображается блоком управления памятью вашей системы в какой-то физический адрес памяти (например, 0x01000000 для x86_64 и вы можете найти его с:

cat /proc/iomem | grep "Kernel code"

на устройстве

Я думаю, что больше всего. Л.Ю. /dev/kmem устройство может быть полезно для security исследования, чтобы посмотреть на процесс с точки зрения ядра, и я не думаю, что есть и другие важные вопросы, которые вы не можете решить без /dev/kmem для этого дня.

+0

'кошка/Dev/kmem' приводит к панике ядра в моей системе (arch64). Когда я проверил более подробную информацию, я вижу, что panic() был вызван 'copy_to_user()' попытаться почтить адрес '0'. –

Смежные вопросы