У меня есть следующая ситуация: ОС Linux (ARM) работает на виртуальной платформе, а простая программа запускается в ОС с точкой останова на определенном символе. Когда эта точка останова попадает, мы находимся в пользовательском пространстве.Где находится ARM Linux для хранения текущего ядра SP в режиме пользователя?
Мой вопрос: имея полный обзор всей виртуальной памяти процесса (в настоящее время работает) (то есть, ядро + пользовательское пространство), могу ли я каким-то образом узнать адрес из task_struct
или thread_info
структур, расположенных на (внизу) стека ядра? Я знаю, что в режиме ядра можно использовать маску на SP для получения нижней части стека ядра, но это не будет работать, если SP указывает на что-то в пользовательском пространстве. По сути, я пытаюсь сделать что-то похожее на макросы current/current_thread_info() в ядре.
Причина, по которой я думаю, что это сложно/невозможно, потому что адрес стека ядра рандомизирован и, следовательно, изменяется с каждым новым процессом.
Вещи мне нужно избегать:
- системных вызовов: ОС, ядро и процесс являются «замороженным» и у нас есть статический вид памяти
- вызова любых функций, которые требуют бегущего OS
Да, обратно в старые дни DOS, где каждый процесс может разрушить систему. Боже мой, я надеюсь, что это невозможно! – Olaf
Теперь спросите о реальной проблеме. –
Возможно, что-то с '/ proc/self/task /' * 'threadid' *'/maps' Это не будет быстро, как макросы ядра. –