LINUX.ORG.RU

поиск sys_call_table


0

0

Приветствую! Понимаю, что подобная тема была уже много раз рассмотрена, однако в последних ядрах нынче нет экспорта структуры 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 ?

Собственно вот и всё.

не могу удержаться. зачем вам sys_call_table ?

по теме. если CONFIG_KALLSYMS, то kallsyms_lookup_name()
поможет.

Это значение равно значению _text (что само собой разумеется)


не сказал бы, что это «само собой разумеется». но на x86
это так, хотя, насколько я понимаю, это только «для красоты»,
инициализацию init_mm.start_code/etc в setup_arch() можно
выкинуть.

в структуре будет хранится 64-битный адрес или 32-битный?


странный вопрос ;) будет храниться «unsigned long», см
struct mm_struct{} в include/linux/mm_types.h

idle ★★★★★
()
Ответ на: комментарий от idle

> не могу удержаться. зачем вам sys_call_table ? Изучаю методы перехвата сис.вызовов, так, для себя.

будет храниться «unsigned long»

да, я тут и правда спросил какую-то несуразную чушь, видать мысль повело.

по теме, так каким образом можно узнать начало секций кода/данных ядра из модуля ядра не обращаясь к System.map? p.s. про kallsyms_lookup_name() я что-то не понял.

AntiDot
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.