2013-03-21 4 views
5

Я пытаюсь найти адресное пространство ядра, в котором мой загружаемый модуль ядра перемещается с помощью insmod.Поиск адреса ядра загружаемого модуля ядра

Я узнал, что с помощью переключателей -m, -O во время установки модуля мы можем видеть только таблицу символов и адреса секций исполняемого файла с точки зрения модуля, а не их перемещенные адреса, поскольку этот процесс перемещения выполняется, когда мы делаем insmod.

Может ли кто-нибудь сказать, как найти перемещенный адрес модуля в ядре-памяти, то есть адрес, связанный в ядре, где находится загруженный модуль?

Спасибо!

P.S Обратите внимание, что я использую ядро ​​Linux Redhat 2.4, в котором список/proc/modules не отображает виртуальные адреса загруженных модулей.

ответ

7

Вы можете получить указатель на основной раздел (виртуальный адрес, а не адрес физической памяти, но он может быть преобразован на физический адрес) и размер места на диске модуля из файла/proc/modules.

Такие, как часть файла на моих Linux поле:

autofs4 29253 3 - Live 0xf9014000 
hidp 23105 2 - Live 0xf900d000 
rfcomm 42457 0 - Live 0xf8f84000 
+0

Hi @tian_yufeng, спасибо! Однако я использую ядро ​​Linux Redhat 2.4, в котором список/proc/modules не отображает виртуальный адрес, отредактированный в моем вопросе. Вы знаете, как получить адрес ядра загруженных модулей в этом ядре 2.4? – freax

+0

2.4 Ядро - это немного. Я думаю, что изменения кода необходимы для поддержки функции, которую вы хотите. Можете ли вы рассказать мне подробную версию вашего ядра? Поэтому я могу загрузить его, чтобы иметь чек. –

+0

Я использую Redhat 2.4.20-24.7 kernel Обнаружили адреса модулей с помощью указателя __this_module.next, который, я считаю, является виртуальным. Можете ли вы рассказать мне, как конвертировать эти виртуальные адреса в физические адреса? Благодаря! – freax

10

Перейти в каталог /sys/module/<module-name>/sections/.text - покажет, где код загружается /sys/module/<module-name>/sections/.data покажут раздел данных и .bss для секции ОНБА из модуль.

+3

Быстрый совет: вам нужен root, чтобы получить нужный файл cat /sys/module/module-name-here/sections/.* . (Иначе он просто отображает значение 0x0). – kaiwan

+0

@kaiwan Ваш совет спасает мой день! – mkdong

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