bsod (mov eax,[0])

Тема в разделе "WASM.NT.KERNEL", создана пользователем qwqwqwqw, 27 апр 2009.

Статус темы:
Закрыта.
  1. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Пример на С как ловить исключения

    Код (Text):
    1. PULONG p = NULL;
    2. ULONG a;
    3.  
    4. __try{
    5. a = *p; // тут будет исключениe
    6. }
    7. __except(EXCEPTION_EXECUTE_HANDLER)
    8. {
    9. // сюда будет переход если произошло исключение
    10. }
    тебе на ассемблере надо создать нечто подобное для того чтобы исключения корректно отлавилвались
     
  2. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    qwqwqwqw
    Еще достойная статья (кстати переведенная на наш великий и могучий) про SEH: "Win32™ SEH изнутри". Найти можно в разделе статей на этом сайте.
     
  3. Clerk

    Clerk Забанен

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Comer_
    Кстате для вас. Если ты обозлён после моего ответа в топике про цих - знай, статус не имеет значения, важно лиш то, что я смогу вынести для себя - оотуда ничего. Может админ и живёт проектом, но для меня это ничто. Тут вам не мпаб, поэтому стиль и термины соответствуют форуму. Как от вас - кроме трипового бреда ничего больше нет. Идите на соответствующий форум.
     
  5. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Clerk
    Да судя по его вопросу он основ незнает, так что сурцы ему понадобятся только после изучения теории :)
     
  6. qwqwqwqw

    qwqwqwqw New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2009
    Сообщения:
    54
    кто ж вам сказал что основ не знаю ....
    я понимаю как работает обработка исключений в юзер моде .....
    но многие вещи кернел мода для меня дики и закрыты, вот я и пытаюсь разобраться в них ..... и так ... вопросы :
    1)в ядре обработка исключений аналогична обработке исключений в юзермоде ?
    2)сам бсод - и есть обработчик ????
     
  7. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    бсод это вызов ф-ции KeBugCheck какой-то другой ф-цией. У Руссиновича это все написано, и не только у него...
    Почитай хоть какую-то инфу по поводу кернел мода, юзер мод это другая опера...
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    BSoD, который показывается функцией KeBugCheck(/2/Ex) это реакция на критическое событие, после которого нельзя продолжать работу системы.
    Необработанное драйвером исключение - пример такого события.
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Ни над кем я не стустался, просто отметил, что у него обширные познания в области ядра windows. Я за то, чтобы сменить его статус "Воин дзена" на что-то другое :)
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    KeSqueer
    ядро дзена ;)
     
  11. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    про ядро не могу сказать но х86 он не знает ;-(
     
  12. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    SashaTalakin
    где обещанная подпись?
    в бан!

    Aquila
    действительно сделайте Clerkа ядром дзена.
    он этого заслужил!
    он тут так красиво разные темы разруливает, а взамен ,заместо спасибо, разные личности
    только нервы ему трепят.
     
  13. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    wsd
    А мнение Clerk'a ты спросить не забыл? Может ему эта клоунада вобще не нужна? :)
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    TSS
    это не клоунада :dntknw:
    нормальный титул, отражающий сущность, и без пафоса .
    труд должен поощряться для его дальнейшей мотивации просто.
    но это конечно его дело, если что не так прости :)
     
  15. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    wsd
    Дык я был прав зачем подпись?!
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    SashaTalakin
    а да да
    я тот ответ ТС пропустил :)
    только прав это громко сказано. прав это логика на фактах. по его мутной первоначальной
    формулировке , я бы сказал, что угадал, т.е. подфортило ... :))
    а клерк просто не ожидал от ТС такой не компетенции, в том вопросе, и пошёл другим путём.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Причём тут я вообще не понятно. Бгг ядро Дзена, хорошая шутка.
    Я и представить не мог и сейчас не пойму как автор пишет про обработку исключений и спрашивает затем почему исключения не обрабатываются:
    Для #PF не пропустит MmAccessFault() обработку если IRQL >= DISPATCH_LEVEL. На APC_LEVEL(1) исключение будет обработано. Автор верно сказал, но потом оказалось что обработчик исключений не зареган. Как это понять ?

    Обработка подобна юзермодной только касательно SEH. Такиеже фреймы, одинаковые смещения в TIB/PCR адресуемых Fs. В остальном обработка совершенно иная.
    В общем схема следующая для исключений в ядре.

    ISR ->
    CommonDispatchException()
    KiDispatchException()
    [KiDebugRoutine]
    RtlDispatchException()
    KeBugCheck(KERNEL_MODE_EXCEPTION_NOT_HANDLED)

    При исключении процессор исполняет обработчик определённый в соответствующем шлюзе. В нём идёт внутреняя обработка исключения и подготовка к вызову обработчика.
    KiDispatchException() - собственно и есть обработчик исключений. Любое исключение которое требует какойлибо обработки пройдёт через него. Он вызывает дебуггер для обработки исключения если его калбэк зарегистрирован, это обработчик в KiDebugRoutine. Он будет вызван первым. Если он не зарегистрирован или исключение не обработано им, выполняется структурная обработка исключений. Это исполняет RtlDispatchException(). От юзермода отличие - нет никаких финальных, векторных и пр. обработчиков. Только цепочка сех-фреймов. Если они не обработают исключение система будет остановлена с кодом KERNEL_MODE_EXCEPTION_NOT_HANDLED, тоесть бсод вылетит. Если обработка прошла, то выполняется возврат на прерванный код, состояние процессора будет восстановлено в Kei386EoiHelper().
     
  18. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Clerk
    Кстати интересно, что функция KiDispatchException которая обрабатывает исключения сама обернута блоком _try / _except. Кстати в сорцах винды её кода нет вроде...
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Она для записи в юзермодный стек защищена сех. В сурцах немного иначе http://files.virustech.org/indy/wrk/exceptn.c
     
  20. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Точнее от переполнения стека:

    Код (Text):
    1. .text:00422C6D _KiDispatchException proc near
    2.  
    3. .text:00422C6D                 push    390h
    4. .text:00422C72                 push    offset stru_422D70
    5. .text:00422C77                 call    __SEH_prolog
    т.е. SCOPETABLE находится по адресу 422D70, смотрим lpfnHandler и видим:

    Код (Text):
    1. .text:0044B170 loc_44B170:
    2. .text:0044B170                 mov     esp, [ebp-18h]
    3. .text:0044B173                 cmp     dword ptr [ebp-3A0h], [b]EXCEPTION_STACK_OVERFLOW[/b]
     
Статус темы:
Закрыта.