Помогите определить причину BSOD

Тема в разделе "WASM.NT.KERNEL", создана пользователем Clerk, 19 мар 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код выполняется в модуле ntoskrnl.exe в секции '.text', управление на него передаётся из UserMode посредством Call far. На первой инструкции - BSOD.

    Windows XP Kernel Version 2600 (Service Pack 2) MP (2 procs) Free x86 compatible
    Kernel base = 0x804d7000 PsLoadedModuleList = 0x805644a0
    *******************************************************************************
    * Bugcheck Analysis *
    *******************************************************************************
    Bugcheck code 1000008E
    Arguments 80000004 8054d185 b2106d5c 00000000

    ChildEBP RetAddr Args to Child
    WARNING: Stack unwind information not available. Following frames may be wrong.
    0012ffb0 00801193 00000000 00000000 00000000 ntoskrnl+0x76185
    0012fff0 00000000 00801188 00000000 00000000 0x801193

    eax=00000000 ebx=8054d185 ecx=0012fe84 edx=00000048 esi=00801084 edi=0012ff32
    eip=8054d185 esp=b2106dd0 ebp=0012ffb0 iopl=0 nv up ei pl nz na po nc
    cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
    ntoskrnl+76185:
    8054d185 fa cli
    *******************************************************************************
    * EFlags *
    *******************************************************************************
    EFLAGS_IF equ 0000000000001000000000b ;Interrupt Flag
     
  2. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    Clerk ну ты замутил систему :)

    вроде это Bug Check 0x8E: KERNEL_MODE_EXCEPTION_NOT_HANDLED
    а вот почему пусть спецы скажут :)
     
  3. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    а разве можно прыгать так далеко и так просто?
    по-моему обращение в системную область памяти из юзермода и должно вызывать исключение
    не даром же ntdll.dll спроецирована и туда и сюда
    как вариант имхо переходничок на подобие ntdll.dll сделать, или тоже пропатчить :)
     
  4. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Clerk
    Поподробнее можно?
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    обычный гейт или дескриптор с DPL = 0
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Clerk
    чуть-чуть кода бы не помешало ;)
     
  7. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    rei3er
    я понял, я имел ввиду что ...
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Суть в следующем. Если я выделяю память с помощью ZwAllocateVirtualMemory и туда записываю обработчик, то при смене кольца иногда он выполняется, а иногда падает с STATUS_IRQL_LESS_OR_EQUAL, видимо потомучто память выгружаемая. Попытался залочить через ZwLockVirtualMemory, при выполнении сразу падает. Я решил записать обработчик в свободное место в ntos, в секцию кода, где места достаточно. Вызываю - BSOD. С этим проблемы, в варе не работает, там вообще фигня происходит.
     
  9. vshemm

    vshemm New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    10
    Во-первых, селектор, используемый в call far должен обладать спецсвойствами (чтобы его юзать из ринг3).
    Во-вторых, Zw* функции оперируют с памятью в ринг3 (причем персонально для адресного пространства процесса), в ринг0 адреса могут быть другими.
    В-третьих, нужно убедиться, что виртуальным адресам соответствуют физические (и из RAM). Т.е. вируальный адрес может быть зарезервирован (в адресном пространстве процесса), но ему нет соответствия физической памяти в каталоге страниц => эксепшн. Ну и права у данной страницы должны быть соответствующие (на выполнение).

    Нужен код или более подробное описание самого процесса :)
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Я ступил, причина в TrapFlag; это вызывало отладочное исключение. Всем спасибо.
     
  11. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Clerk

    В User Mode пространстве адресов - память ВСЕГДА выгружаемая.
     
  12. Clerk

    Clerk Забанен

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