Приветствую воинов Дзена! Понимаю, что подобная тема была уже много раз рассмотрена, однако в последних ядрах нынче нет экспорта структуры init_mm. Таким образом получить init_mm.end_code и init_mm.end_data уже не так просто. Собственно в этом и заключается вопрос, как же тогда теперь получить адрес таблицы системных вызовов? Да, можно патчить ядро, можно править IDT, однако меня интересует несколько другая реализация. На просторах паутины я натолкнулся на предложение искать init_mm структуру по значению поля start_code. Это значение равно значению _text (что само собой разумеется), которое можно посмотреть в /boot/System.map Вроде всё проще простого, однако у меня возникли некоторые трудности по причине неопытности, которые, я надеюсь, мне помогут разрешить здесь. 1. Поскольку изначально мы не имеем доступа к структуре init_mm, то как нам получить диапазон секции данных, в которой мы и будем проводить поиск значения _text, которое будет являться полем искомой нами структуры? 2. Все вышесказанное относится к 64-битной архитектуре, что накладывает свои особенности. Например, в структуре будет хранится 64-битный адрес или 32-битный? То есть интересно, если _text = ffffffff81000000, то init_mm.start_code == ffffffff81000000 или 81000000 ? Собственно вот и всё.
1. дизассемблировать кусок обработчика, адрес которого взят из IDT, как вариант 2. 0xffffffff81000000