Доступ к любым областям памяти в Linux 2.6.x - PullRequest
1 голос
/ 13 июля 2010

Я использую Slackware 12.2 на компьютере с архитектурой x86. Я пытаюсь отладить / выяснить вещи, сбрасывая определенные части памяти. К сожалению, мои знания о ядре Linux весьма ограничены тем, что мне нужно для программирования / тестирования.

Итак, вот мой вопрос: есть ли способ получить доступ к любой точке памяти? Я попытался сделать это с помощью указателя на символ, чтобы он был длинным байтом. Однако программа потерпела крах и выплюнула что-то в таком духе: «не могу получить доступ к памяти». Теперь я указывал на местоположение 0x00000000, где система хранит свои векторы прерываний (если только это не изменилось), что на самом деле не должно иметь значения.

Теперь я понимаю, что ядро ​​будет выделять память (данные, стек, кучу и т. Д.) Программе, и эта программа не сможет больше никуда идти. Так что я подумывал об использовании NASM, чтобы сказать процессору, чтобы он получал то, что мне нужно, но я не уверен, что это сработает (и мне нужно было бы выяснить, как перевести MASM в NASM).

Хорошо, хорошо, вот мой длинный однобокий монолог. По сути, мой вопрос: «Есть ли способ достичь этого?».

В любом случае ...

Ответы [ 2 ]

5 голосов
/ 13 июля 2010

Если ваша программа работает в пользовательском режиме, то память за пределами вашей памяти процесса не будет доступна, всеми правдами и неправдами.Использование asm не поможет, как и любой другой метод.Это просто невозможно, и является основной функцией безопасности / стабильности любой ОС, которая работает в защищенном режиме (то есть, все они за последние 20 с лишним лет). Вот краткий обзор управления памятью ядра Linux.

Единственный способ исследовать полное пространство памяти вашего компьютера - использовать отладчик ядра, который будетпозволит вам получить доступ к любому физическому адресу.Однако даже это не позволит вам одновременно просматривать память каждого процесса , поскольку некоторые процессы будут выгружены из основной памяти.Более того, даже в режиме ядра физические адреса не обязательно совпадают с адресами, видимыми для процесса.

3 голосов
/ 13 июля 2010

Взгляните на / dev / mem или / dev / kmem (man mem ) Если у вас есть root-доступ, вы сможете увидеть свою память там. Этот механизм используется отладчиками ядра.

Обратите внимание на предупреждение: Проверка и исправление могут привести к неожиданным результатам при наличии битов только для чтения или только для записи.

со страницы руководства:

mem  is  a character device file that is an image of
the main memory of the computer.  It may be used, for
example, to examine (and even patch) the system.

Byte  addresses  in  mem  are interpreted as physical 
memory addresses. References to nonexistent locations 
cause errors to be returned.

...

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