2014-02-05 4 views
1

Прежде всего, мне нужно знать адреса в System.map или /proc/kallsyms являются виртуальными или физическими? , тогда я хочу читать из адресов символов ядра, например, я хочу прочитать поле pid поля init_task. Я могу найти init_task адрес от System.map, а также смещение pid. но я не знаю, как читать с адреса в ядре. Я очень ценю любую ссылку или ссылку, чтобы сказать что-то подробно, потому что я не знаком с программированием ядра.символы ядра в модуле ядра

другой вопрос: когда говорят DKOM (манипулирование динамическим ядром), что это значит? Я искал, но просто нашел что-то о системе Windows!

и когда говорят, что вы можете получить exported symbols в LKM? какие операции они имеют в виду? являются специфическими функциями для чтения или записи из символов ядра?

ответ

2

Практически любой адрес указателя, который вы видите, является виртуальным. Его либо пространство пространства пользователя обрабатывает виртуальное пространство (а именно ваш процесс), либо виртуальное адресное пространство ядра. Только тогда, когда ядру необходимо сообщить одному аппаратным компонентам, как получить доступ к другому, который преобразует указатель в физическое представление.

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

Что касается чтения/записи указателей ядра из пользовательского пространства. Если не предоставлено конкретным API и не установлено как пользователем, так и ядром (например, разделяемой памятью), вы не можете. Его самая простая защита безопасности, выгравированная в ядре операционной системы. (вы даже не можете получить доступ к памяти другого пользователя).

Сказав, что, если вы хотите, чтобы намеренно уменьшить безопасность ядра, как корень, вы можете делать что угодно, в том числе загрузить модуль, который делает только что ...

вот другое обсуждение на эту же тему : how-to-access-kernel-space-from-user-spacein-linux

1

Во-первых, адреса в System.map или /proc/kallsyms являются виртуальными адресами.

Во-вторых, если вы хотите, чтобы структура данных перемещения в ядре, вы можете использовать Crash tool. Он основан на gdb, прост в использовании. Но сначала необходимо перекомпилировать ядро ​​с информацией об отладке. С помощью инструмента сбоя вы можете легко прочитать каждую структуру данных ядра в пространстве пользователя. И он поддерживает множество распределений, таких как Ubuntu, Fedora и т. Д.

Еще один инструмент: Volatility, написанный Python, вы можете сделать снимок вашей системы. Затем прочитайте снимок памяти с Volatility.

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