#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 может быть установлен в памяти для этого символа