1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Свой exception handler под драйвером

Тема в разделе "WASM.NT.KERNEL", создана пользователем MP_ART, 31 июл 2006.

  1. MP_ART

    MP_ART New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    4
    Адрес:
    Russian Federation
    Люди, подскажите как на чистом асме поставить свой exception handler под драйвером.

    Юзермодовсий

    push my_handler
    mov eax,fs:[00000000]
    push eax
    mov fs:[00000000],esp
    ....

    не пашет, BSOD всё равно при Page Fault как если /* deleted */

    /* deleted */
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    смотри пример examples\basic\MemoryWorks\seh из KmdKit.
    А не работать кстати может потому, что идет обращение к неподкачиваемой памяти, а их сехи не ловят.
     
  3. MP_ART

    MP_ART New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    4
    Адрес:
    Russian Federation
    То есть если написать mov [0], eax то не прокатит?
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Код (Text):
    1. push offset xHandler
    2.     push fs:[0]                     ; address of next ERR structure
    3.     mov fs:[0], esp
    4.  
    5. DefaultExceptionHandler proc C pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD
    6.  
    7.     mov eax, pExcept
    8.     invoke DbgPrint, $CTA0("Exception: %08X at address: %08X\n"), \
    9.                         [eax][EXCEPTION_RECORD.ExceptionCode], \
    10.                         [eax][EXCEPTION_RECORD.ExceptionAddress]
    11.  
    12.     lea eax, _seh
    13.     push (_SEH PTR [eax]).SafeEip
    14.     push (_SEH PTR [eax]).PrevEsp
    15.     push (_SEH PTR [eax]).PrevEbp
    16.  
    17.     mov eax, pContext
    18.     pop (CONTEXT PTR [eax]).regEbp
    19.     pop (CONTEXT PTR [eax]).regEsp
    20.     pop (CONTEXT PTR [eax]).regEip
    21.  
    22.     ; reload context & continue execution
    23.     xor eax, eax            ; return ExceptionContinueExecution
    24.     ret
    25.  
    26. DefaultExceptionHandler endp
    Все прокатит, работа с исключениями в драйверах ничем не отличается от юзермода. Бывают конечно случаи, когда простой сех не сработает (например исключения генерируемые всякими функциями вроде ProbeForRead обрабатываються только сишным сехом, с его специфичными структурами). Есть множество типов исключений, которые вобще не обрабатываются сехами (деление на 0, двойное исключение, исключения при обращении к неподкачиваемой памяти и.т.д.).
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    MP_ART
    Вспомни как работают ловушки для исключительных ситуаций? А как вспомнишь, вспомни кто должен ловить в привелиригированном уровне
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    http://www.wasm.ru/forum/viewtopic.php?id=11025
     
  7. MP_ART

    MP_ART New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    4
    Адрес:
    Russian Federation
    OK, thanks to all!