Базовый адрес модуля, загруженного в ядро Linux

#debugging #linux-kernel #kernel-module

Вопрос:

Я хотел бы знать базовый адрес, по которому загружается модуль ядра. Что такое шестнадцатеричный адрес /proc/kallsyms /sys/module/<MODULE_NAME>/sections/.init.text и /proc/modules что он обозначает. Какой из них я должен использовать для отладки?

Комментарии:

1. Физическое или виртуальное? Информация, предоставляемая ядром о модулях, должна находиться в виртуальном адресном пространстве, в котором работает само ядро.

2. @0andriy, мой вопрос в контексте виртуального адреса.

Ответ №1:

Ядро выполняет vmalloc и копирует содержимое модулей, переданных из пользовательского пространства, в буфер vmalloc’d. Базовый адрес модуля будет задан шестнадцатеричным адресом, на который указывает /proc/modules

/proc/kallsyms: адрес, по которому символ загружается в память

/sys/модуль/<ИМЯ_МОДУЛЯ>/разделы/.init.text: начальный адрес раздела .init.text в памяти этого модуля

/proc/модули : Начальный адрес модуля в памяти

Я бы предложил использовать kallsyms для отладки, так как bp может быть установлен в памяти для этого символа