Я пробовал свои руки на addr2line
, чтобы преобразовать значение регистра «p c» из ошибки ядра ( example ) в строку в коде ядра. Я считаю, что значение счетчика программы представляет собой виртуальный адрес.
Теперь этот пост в Stack Overflow говорит, что мы обычно предоставляем смещение для addr2line, а не виртуальный адрес. VA можно использовать только тогда, когда отключена рандомизация адресного пространства. Верно ли это и для ядра? Я считаю, что должен.
Этот встроенный Linux Конференц-разговор на слайде 14 также использует значение счетчика программы для перехода к строке кода, но я считаю, что это сработает только работают, когда рандомизация адресного пространства выключена. В противном случае, после инициализации виртуальной памяти, возможно, что ядро будет перемещено случайным образом. В этом случае любой виртуальный адрес, выбранный из oops, не имеет смысла для addr2line. Это все теория. У меня сейчас 2 вопроса:
- Я правильно понял? Если нет, поправьте меня.
- Как отключить рандомизацию адресного пространства для ядра, чтобы можно было предсказать местоположение символа?