Поиск sys_call_table

Тема в разделе "WASM.UNIX", создана пользователем Shturm0vik, 29 авг 2010.

  1. Shturm0vik

    Shturm0vik New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2004
    Сообщения:
    3
    Адрес:
    EFIR
    Приветствую воинов Дзена!
    Понимаю, что подобная тема была уже много раз рассмотрена, однако в последних ядрах нынче нет экспорта структуры 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 ?

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

    testtest New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    4
    1. дизассемблировать кусок обработчика, адрес которого взят из IDT, как вариант
    2. 0xffffffff81000000
     
  3. blacktelecom

    blacktelecom New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2010
    Сообщения:
    235
    Код (Text):
    1. cat /boot/System.map`uname -r`|grep sys_call_table