Символы ядра в модуле ядра

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

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

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

2 ответа

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

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

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

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

Вот еще одно обсуждение на ту же тему: как получить доступ к пространству ядра из пространства пользователя в linux

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

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

Другой инструмент - Volatility, написанный Python, вы можете сделать снимок вашей системы. Затем прочитайте снимок памяти с волатильностью.

Другие вопросы по тегам