Бектрейс в в ядре

Тема в разделе "WASM.NT.KERNEL", создана пользователем ntdrivers, 9 окт 2010.

  1. ntdrivers

    ntdrivers New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2010
    Сообщения:
    25
    А как осуществляется бектрейс в ядре? Нужно же знать сигнатуры вызываемых функций для вычисления размера фрейма? Или в ядре есть какие-то средства для этого?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    ntdrivers
    Также как и в юзермоде. Только необходимо идентифицировать фрейм(может быть как стековым, так и трап-фреймом).
     
  3. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    - Clerk.
    гораздо проще вставить в поток usermode apc, и в KernelRoutine сделать то что нужно
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Ну мб и проще. Только тут раздел NT.KERNEL и не все задачи решаются через апк. У ТС стандартная задача.
     
  5. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    - конечно. хотя для даной задачи apc может и подойти.
    - ну и что ?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Так вы предлагаете юзать в драйверах юзермодные потоки =)
     
  7. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    - а не usermode поток :)
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Тогда не универсально. Вы не сможите отследить создание процессов ядром(PsCreateSystemProcess() etc).
     
  9. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Отслеживание бесполезно в данном случае. ТС необходимо не только отслеживать, но и выполнять некторые действия с адресным пространством, которые выполнить без понижения SFN нельзя.
     
  11. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    - SFN - что это ? Irql ? KernelRoutine вызывается на APC_LEVEL, но это можно поправить - KeLowerIrql(PASSIVE_LEVEL);
    ... выполнять некторые действия ...
    KfRaiseIrql(APC_LEVEL); обычно KeLowerIrql вызывать(без предварительного KfRaiseIrql) нельзя, но в данном случае можно. собственно даже ntoskrnl делает это в KiDeliverApc перед вызовом NormalRoutine из Kernelmode apc
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Stack Frame Number.
     
  13. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    - ясно.
    - :) адресным пространством соотносится с SFN примерно как метры c дождём. причём здесь одно к другому ?
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    При том, что на текущем уровне SFN нотифи аллокация памяти и прочие действия с адресным пространством не доступны, это приведёт к деадлоку. Их можно выполнить только понизив SFN, ниже чем в MmMapViewOfImageSection().
     
  15. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    http://www.wasm.ru/forum/viewtopic.php?id=38892 - KernelRoutine будет вызвана вне пределов локов.
    - это же вы сами написали !!
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Да, это частный случай с урезанной работаспособностью. Если процесс создаётся из юзермода, то при возврате из сервиса будет доставлена апк. Для системных процессов это работать не будет.
     
  17. __MAX__

    __MAX__ New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    19
    ладно :) как скажете.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    __MAX__
    Смотрите. Есть функция X, это кэлбэк который известен. Функция Y вызывает функцию X, причём есть множество промежуточных функций. Тоесть Y() -> A() -> B() -> C()... -> X(). Число функций не известно. Также не известен адрес возврата из функции A() в функцию Y(), так как она не экспортируется и поиск сложен. Как получить управление при возврате из функции Y() без патча ?