蓝屏,谁之过?

Bug总能在你意想不到的地方给你个措手不及,只是它所带来并不是惊喜,而是Blue Screen Of Death !

既如此,只能兵来将挡。

先介绍一下程序的大体流程:

NTSTATUS
XXXProcessDirents(…)
{    
    do {
        KeEnterCriticalRegion();
        ExAcquireResourceSharedLite(&fcb->Resource, TRUE);

        /* access several members of fcb structure */
        ExReleaseResourceLite(&fcb->Resource);
        KeLeaveCriticalRegion();

         XXXXProcessDirent(…);

    } while (list_is_not_empty(….));

    return status;
}

NTSTATUS
XXXXProcessDirent(…)
{
    HANDLE handle = NULL;
    XXXX_FILE_HEADE fileHead;
    ……

    /* open file */
    status = ZwCreateFile(&handle, GENERIC_READ, &oa, &iosb, NULL, 0,
                          FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                          FILE_OPEN, 0, NULL, 0);

    /* read file header*/
    status = ZwReadFile(handle, ioevent, NULL, NULL, &iosb, (PVOID)&fileHead,
                        sizeof(XXXX_FILE_HEADE), &offset, NULL);

    /* check whether file is interesting to us */
    if (status == STATUS_SUCCESS && iosb.Information == sizeof(……)) {
        /* it’s my taste, haha */
    }

    /* close file, not interested in it any more */

    if (handle){
        ZwClose(handle);
    }

    return status;
}

过程比较简单,XXXProcessDirents()会循环调用XXXProcessDirent(),直至列表中所有项全检查完毕。

下面再来看windbg分析吧:

1: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 0abc9867, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000001, bitfield :
bit 0 : value 0 = read operation, 1 = write operation
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 806e7a2a, address which referenced memory

Debugging Details:
------------------

WRITE_ADDRESS:  0abc9867

CURRENT_IRQL:  2

FAULTING_IP:
hal!KeAcquireInStackQueuedSpinLock+3a
806e7a2a 8902            mov     dword ptr [edx],eax

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  System

TRAP_FRAME:  b9019bbc -- (.trap 0xffffffffb9019bbc)
ErrCode = 00000002
eax=b9019c40 ebx=00000000 ecx=c0000211 edx=0abc9867 esi=c0000128 edi=8842d268
eip=806e7a2a esp=b9019c30 ebp=b9019c68 iopl=0         nv up ei ng nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010286
hal!KeAcquireInStackQueuedSpinLock+0x3a:
806e7a2a 8902            mov     dword ptr [edx],eax  ds:0023:0abc9867=????????
Resetting default scope

LAST_CONTROL_TRANSFER:  from 806e7a2a to 80544768

STACK_TEXT:
b9019bbc 806e7a2a badb0d00 0abc9867 804f4e77 nt!KiTrap0E+0x238
b9019c68 806e7ef2 00000000 00000000 b9019c80 hal!KeAcquireInStackQueuedSpinLock+0x3a
b9019c68 b9019d24 00000000 00000000 b9019c80 hal!HalpApcInterrupt+0xc6
WARNING: Frame IP not in any known module. Following frames may be wrong.
b9019cf0 80535873 00000000 8896fb20 00000000 0xb9019d24
b9019d10 b79d87ff ba668a30 8859b7e8 00000440 nt!ExReleaseResourceLite+0x8d
b9019d2c b79d8a5c 8a3ff2f0 00000003 ba6685f0 XXXXX!XXXProcessDirents+0xef
b9019d88 b79e163a e2f6b170 00000001 00000001 XXXXX!XXXKernelQueryDirectory+0x20c
b9019ddc 8054616e b79e1530 88a8ae00 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16

问题出在系统函数ExReleaseResourceLite()及KeAcquireInStackQueuedSpinLock()上,且程序要写的地址为0abc9867 ,明显不对,所以此处可做栈损坏推断。

第一嫌疑要考虑的是,XXXProcessDirents()中有锁保护的部分,此部分是果真是最容易造成栈损坏buffer复制操作。但经过仔细检查及测试,便排除了此部分出错的可能。

在排除第一嫌疑后,就没有明显目标了。只好再接着看windbg log:

貌似KeAcquireInStackQueuedSpinLock()要写的地址是LockHandle的LockQueue->Next,而LockHandle一般都在从当前堆栈分配的,由此可肯定之前对于栈损坏的推断。可问题是,是谁导致的栈损坏。

Stack中有hal!HalpApcInterrupt()调用记录,它是处理APC的软中断。hal!HalpApcInterrupt()会一般会调用nt!KiDeliverApc()来处理线程的APC队列。但当ExReleaseResourceLite()调用的时候,线程还处于临界区内(Critical Section),此时User mode APC及Kernel mode normal APC都会被禁止的,但Kernel mode special APC不会。

Kernel Special APC最常见的情况便是由IoCompleteRequest()添加的:在APC Level中调用IopCompleteRequest()以处理Irp的Stage 2的清理工作。

至此,问题终于有些眉目了。分析代码中唯一有可能导致APC添加的地方就在函数XXXXProcessDirent()中的ZwReadFile()调用,而且fileHead正是于堆栈中分配的。

想到此处,此bug的根据原因便付出水面:

XXXXProcessDirent()没有处理ZwReadFile()返回STATUS_PENDING的情况,此情形下,XXXXProcessDirent()退出并继续执行,而之前的ZwReadFile()的IRP完成操作也在同时进行(还没有完成),并且此完成操作所要写的fileHead地址,正是早已被回收并加以重用的当前栈。

搞清楚之后,便在调用ZwReadFile()后,特别针对STATUS_PENING的情况来调用ZwWaitForSingleObject()以确保读操作全部完成后,再进行下一步操作。

到此,问题解决!

一个蓝屏的问题,竟然如此之绕,不禁让我想起刘震云的《一句顶一万句》,只是这能顶一万句的一句到底是哪句呢?

<下一步打算写写APC相关的东西,操作系统将APC隐藏得太深,总让人捉摸不定!>

18,172 条评论

  1. Этот обзор медицинских исследований собрал самое важное из последних публикаций в области медицины. Мы проанализировали ключевые находки и представили их в доступной форме, чтобы читатели могли легко ориентироваться в актуальных темах. Этот материал станет отличным подспорьем для изучения медицины.
    Только для своих – частный наркологический центр в Самаре

  2. Если ожидаемая динамика «плоская», мы не усиливаем всё сразу. Меняется один параметр: скорость инфузии, порядок модулей или длительность вечерних включений. Такой «тонкий ремонт» безопаснее тотальной перестройки и лучше сохраняет ясность днём.
    Подробнее можно узнать тут – лечение в наркологической клинике воронеж

  3. Длительный запой опасен не только выраженным похмельным синдромом. Продолжительное употребление спиртного нарушает водно-солевой баланс, работу сердца, печени, нервной системы и головного мозга, увеличивает риск артериального давления, судорожного приступа, психоза, сердечной недостаточности и других острых осложнений. Поэтому самостоятельно резко прекращать употребление алкоголя при продолжительном запое бывает небезопасно. Врач оценивает симптомы, анамнез и показатели здоровья, после чего подбирает препараты, инфузионные растворы и дополнительные средства. Такой подход позволяет провести вывод из запоя контролируемо и снизить вероятность ухудшения состояния.
    Узнать больше – https://vyvod-iz-zapoya-reutov15.ru/

  4. Современные методы лечения подбираются по медицинским показаниям. В клинике могут рассматриваться медикаментозное кодирование, методы с применением психотерапии и комбинированные программы. У каждого способа есть особенности, показания и противопоказания. Некоторые методы воздействуют на фармакологической основе, другие направлены на формирование психологической установки и изменение отношения к спиртному. Самый подходящий вариант определяет нарколог, а при наличии эмоциональных и поведенческих нарушений к работе может подключаться психиатр, психолог или психотерапевт.
    Ознакомиться с деталями – кодирование от алкоголизма цены

  5. Длительный запой опасен не только выраженным похмельным синдромом. Продолжительное употребление спиртного нарушает водно-солевой баланс, работу сердца, печени, нервной системы и головного мозга, увеличивает риск артериального давления, судорожного приступа, психоза, сердечной недостаточности и других острых осложнений. Поэтому самостоятельно резко прекращать употребление алкоголя при продолжительном запое бывает небезопасно. Врач оценивает симптомы, анамнез и показатели здоровья, после чего подбирает препараты, инфузионные растворы и дополнительные средства. Такой подход позволяет провести вывод из запоя контролируемо и снизить вероятность ухудшения состояния.
    Получить больше информации – vyvod-iz-zapoya-kruglosutochno-reutov

  6. Доктор Елена Иванова, ведущий специалист клиники, отмечает: «Комбинация современных медикаментозных средств и психотерапии значительно повышает шансы на успешное избавление от зависимости».
    Подробнее можно узнать тут – наркологическая клиника клиника помощь ростов-на-дону

  7. В городе и ближайших районах клиника «УралМед Трезвость» обеспечивает оперативный выезд и амбулаторный приём без очередей. На этапе первичного контакта координатор уточняет только клинически значимые моменты: постоянные препараты и дозы, аллергии, эпизоды судорог/психозов в прошлом, базовые показатели (АД/ЧСС/SpO?, если доступны), длительность симптомов, возможность организовать «тихое окно» на 20–30 минут. Вместо долгих разговоров — короткая, спокойная логика: где безопаснее начать (дом/амбулатория/стационар), какую ближайшую цель выбираем, в каком интервале ждём эффект и что считаем сигналом для связи с дежурным врачом.
    Выяснить больше – наркологическая клиника стационар челябинск

  8. Выездная или стационарная помощь особенно актуальна, когда состояние зависимого быстро ухудшается, а самостоятельно приехать в медицинский центр тяжело. При обращении по телефону специалист уточняет симптомы и помогает выбрать дальнейшие действия. В некоторых случаях возможен вызов нарколога на дом, однако при признаках тяжелого отравления, нарушениях сознания или других острых расстройствах может потребоваться скорая помощь и госпитализация.
    Изучить вопрос подробнее – наркологическая клиника

  9. Первый этап — консультация и диагностика. Нарколог уточняет, как долго человек употребляет алкоголь или наркотические вещества, были ли запои, эпизоды ломки, кодирование, попытки самостоятельно бросить пить или употреблять наркотики, хронические заболевания и психические расстройства. При необходимости врач назначает анализы и дополнительное обследование. Психиатр оценивает психическое состояние, психолог изучает мотивацию, отношение к проблеме и готовность пройти лечение. На основании полученных данных специалисты составляют индивидуальный план медицинской помощи.
    Получить больше информации – клиника наркологии москва

  10. Этот медицинский обзор сосредоточен на последних достижениях, которые оказывают влияние на пациентов и медицинскую практику. Мы разбираем инновационные методы лечения и исследований, акцентируя внимание на их значимости для общественного здоровья. Читатели узнают о свежих данных и их возможном применении.
    Секреты успеха внутри – наркология клиника

  11. Публикация знакомит читателей с различными подходами к реабилитации. От традиционных методов до современных программ — вы узнаете, как выбрать оптимальный путь к выздоровлению и преодолеть препятствия на этом пути.
    Читать полностью – вызов нарколога при запое

  12. Врач может рекомендовать анализы и дополнительную диагностику, если без них нельзя безопасно подобрать лечение. Наркологическая помощь в медицинском учреждении организуется конфиденциально, а персональные данные защищены в рамках правил медицинской организации. Анонимно обратиться может человек с зависимостью или родственник, которому нужна консультация о помощи близкому. Специалисты сохраняют конфиденциальность и объясняют, какие процедуры допустимы в конкретной ситуации. Если требуется выездное лечение, нарколог заранее получает базовую информацию и выезжает по адресу в Москве и Московской области.
    Получить больше информации – narkologicheskaya-klinika-v-moskve-ceny

  13. В данной публикации мы поговорим о процессе восстановления от зависимости, о том, как вернуть себе нормальную жизнь. Мы обсудим преодоление трудностей, значимость поддержки и наличие программ реабилитации. Читатели смогут узнать о ключевых шагах к успешному восстановлению.
    Есть чему поучиться – реабилитация наркозависимых

  14. Эта информационная публикация освещает широкий спектр тем из мира медицины. Мы предлагаем читателям ясные и понятные объяснения современных заболеваний, методов профилактики и лечения. Информация будет полезна как пациентам, так и медицинским работникам, желающим поддержать уровень своих знаний.
    Перейти к статье – вывод из запоя на дому круглосуточно

  15. Если возникают судороги, психоз, белая горячка, резкое нарушение поведения или угроза жизни, домашнее лечение может быть недостаточным. В таких случаях врач рекомендует экстренное обращение и стационарное наблюдение.
    Изучить вопрос подробнее – нарколог на дом цена Красноярск

  16. Городская среда Калининграда специфична: морской ветер, сезонные пробки, яркие витрины в вечерние часы. Эти факторы часто усиливают тревожность и мешают засыпанию. Поэтому мы проектируем выезд «мягко»: согласованная парковка, немаркированный вход, короткий маршрут до места процедуры, отсутствие громких звонков и «визуального шума» у порога. Родственникам предоставляем «тихие окна» связи — короткие апдейты в заранее оговорённое время без лишних подробностей. Такой формат не просто комфортнее, он клинически полезен: чем меньше стимулов, тем меньше потребность в ночных «усилениях» и тем стабильнее проходит первая ночь.
    Изучить вопрос глубже – срочный вывод из запоя

  17. Этот краткий обзор предлагает сжатую информацию из области медицины, включая ключевые факты и последние новости. Мы стремимся сделать информацию доступной и понятной для широкой аудитории, что позволит читателям оставаться в курсе актуальных событий в здравоохранении.
    А что дальше? – наркология наркологический центр

  18. Семья получает «путевой лист» на 24–72 часа: как фиксировать маркеры (тремор/тревога/тошнота 0–10), как пить воду малыми глотками, когда приглушать свет и в каком формате общаться с пациентом («короткие факты вместо оценок»). Мы также даём «лестницу активности»: два достижимых действия утром, одно — вечером. Эта дисциплина маленьких шагов помогает избежать эмоциональных «перегревов» и удерживает достигнутый эффект.
    Углубиться в тему – http://narkologicheskaya-klinika-v-chelyabinske16.ru

  19. В статье по вопросам здоровья мы рассматриваем актуальные проблемы, с которыми сталкивается общество. Обсуждаются заболевания, факторы риска и важные аспекты профилактики. Читатели получат полезные советы о том, как сохранить здоровье и улучшить качество жизни.
    Смотри, что ещё есть – вызвать анонимного нарколога

  20. Второй важный этап лечения — назначение лекарственных средств, направленных на нормализацию работы нервной системы, снижение симптомов абстиненции и профилактику срывов. Применение медикаментов подбирается индивидуально с учётом типа зависимости и общего состояния пациента.
    Ознакомиться с деталями – лечение наркомании клиника

  21. Частная наркологическая клиника работает с жителями Москвы и Московской области. Обратиться можно самостоятельно или для близкого человека, когда семье трудно понять, что делать и как уговорить зависимого принять помощь. Круглосуточная служба принимает звонок в любое время, консультант уточняет ситуацию и объясняет, как получить консультацию, вызвать нарколога на дому, заказать выезд бригады или приехать в центр. Если необходима госпитализация, специалисты помогают организовать поступление в стационарных условиях без лишней огласки.
    Изучить вопрос подробнее – https://narkologicheskaya-klinika-moskva15-4.ru/

  22. Этот обзор посвящен успешным стратегиям избавления от зависимости, включая реальные примеры и советы. Мы разоблачим мифы и предоставим читателям достоверную информацию о различных подходах. Получите опыт многообразия методов и найдите подходящий способ для себя!
    Изучить рекомендации специалистов – комплексное лечение алкоголизма в Воронеже

  23. Медицинская публикация представляет собой свод актуальных исследований, экспертных мнений и новейших достижений в сфере здравоохранения. Здесь вы найдете информацию о новых методах лечения, прорывных технологиях и их практическом применении. Мы стремимся сделать актуальные медицинские исследования доступными и понятными для широкой аудитории.
    Где можно узнать подробнее? – клиника лечения зависимостей в Санкт-Петербурге

  24. Эта публикация содержит ценные советы и рекомендации по избавлению от зависимости. Мы обсуждаем различные стратегии, которые могут помочь в процессе выздоровления и важность обращения за помощью. Читатели смогут использовать полученные знания для улучшения своего состояния.
    Изучить рекомендации специалистов – нарколог на дом спб

  25. Второй важный этап лечения — назначение лекарственных средств, направленных на нормализацию работы нервной системы, снижение симптомов абстиненции и профилактику срывов. Применение медикаментов подбирается индивидуально с учётом типа зависимости и общего состояния пациента.
    Получить дополнительную информацию – лечение наркомании диспансер

  26. В этой статье рассматриваются актуальные вопросы, связанные с развитием медицинской науки и её внедрением в повседневную практику. Особое внимание уделено вопросам профилактики, ранней диагностики и использованию технологий для улучшения здоровья человека.
    Читать дальше – сколько стоит лечение от алкоголизма в клинике

  27. В этой статье рассматриваются различные аспекты избавления от зависимости, включая физические и психологические методы. Мы обсудим поддержку, мотивацию и стратегии, которые помогут в процессе выздоровления. Читатели узнают, как преодолеть трудности и двигаться к новой жизни без зависимости.
    Читать дальше – нарколог с выездом на дом

  28. В данной статье мы акцентируем внимание на важности поддержки в процессе выздоровления. Мы обсудим, как друзья, семья и профессионалы могут помочь тем, кто сталкивается с зависимостями. Читатели получат практические советы, как поддерживать близких на пути к новой жизни.
    Как достичь результата? – наркология на дому вызов нарколога

  29. Эта публикация раскрывает психологические механизмы зависимости и их роль в развитии расстройств. Читатель узнает о том, как психология влияет на формирование зависимостей и как профессиональная помощь может изменить ситуацию.
    Почему это важно? – платная наркологическая клиника

  30. В этой статье мы рассмотрим современные достижения в области медицины, включая инновационные методы лечения и диагностики. Мы обсудим важность профилактики заболеваний и роль технологий в улучшении качества здравоохранения. Читатели узнают о влиянии медицины на повседневную жизнь и ее значение для современного общества.
    Нажмите, чтобы узнать больше – центр наркологии самара

  31. Врач учитывает симптомы, риски, анамнез и семейную ситуацию, чтобы предложить подходящую программу.
    Изучить вопрос подробнее – https://vyvod-iz-zapoya-reutov15.ru/

  32. Этот обзор медицинских исследований собрал самое важное из последних публикаций в области медицины. Мы проанализировали ключевые находки и представили их в доступной форме, чтобы читатели могли легко ориентироваться в актуальных темах. Этот материал станет отличным подспорьем для изучения медицины.
    Изучить рекомендации специалистов – капельница от похмелья стоимость

  33. В этой статье мы обсудим процесс восстановления после зависимостей, акцентируя внимание на различных методах и подходах к реабилитации. Читатели узнают, как создать план выздоровления и использовать полезные ресурсы для достижения устойчивых изменений.
    Нажми и узнай всё – вызов нарколога на дом воронеж

  34. В этой медицинской статье мы погрузимся в актуальные вопросы здравоохранения и лечения заболеваний. Читатели узнают о современных подходах, методах диагностики и новых открытий в научных исследованиях. Наша цель — донести важную информацию и повысить уровень осведомленности о здоровье.
    Уникальные данные только сегодня – наркологическая клиника

  35. Если ожидаемая динамика «плоская», мы не усиливаем всё сразу. Меняется один параметр: скорость инфузии, порядок модулей или длительность вечерних включений. Такой «тонкий ремонт» безопаснее тотальной перестройки и лучше сохраняет ясность днём.
    Выяснить больше – запой наркологическая клиника воронеж

  36. Качественное лечение начинается с обследования. Клиника собирает сведения о зависимости, анализирует соматические и психические проблемы, уточняет предыдущий опыт терапии. На основании данных диагностики строится программа лечения в соответствии с клиническими задачами. Очень важно оценить состояние комплексно, поскольку одинаковые жалобы могут иметь разные причины.
    Подробнее – https://4.narkologicheskaya-klinika-v-krasnoyarske17.ru/

  37. В этой статье мы рассматриваем разные способы борьбы с алкогольной зависимостью. Обсуждаются методы лечения, программы реабилитации и советы для поддержки близких. Читатели получат информацию о том, как преодолеть зависимость и добиться успешного выздоровления.
    Изучить вопрос глубже – вывод из запоя анонимно

  38. «Как отмечает главный врач-нарколог Виктор Сергеевич Левченко, «современная наркологическая клиника должна обеспечивать не только медикаментозное лечение, но и комплексную поддержку пациента на всех этапах восстановления».»
    Получить дополнительную информацию – наркологическая клиника нарколог

  39. Абстиненция развивается после прекращения употребления алкоголя или некоторых наркотических веществ. Человек может испытывать сильное беспокойство, бессонницу, патологическое влечение, изменения поведения и физический дискомфорт. При тяжелом течении появляются психические расстройства и признаки делирия.
    Ознакомиться с деталями – наркологическая клиника Красноярск

  40. Этот обзор посвящен успешным стратегиям избавления от зависимости, включая реальные примеры и советы. Мы разоблачим мифы и предоставим читателям достоверную информацию о различных подходах. Получите опыт многообразия методов и найдите подходящий способ для себя!
    Читать дальше – капельница от запоя в воронеже

  41. Мы отказываемся от «пакета ради пакета». Программа собирается из модулей, каждый из которых имеет конкретную цель, окно оценки и критерии, при выполнении которых команда двигается дальше. Ниже — примерная карта: она не заменяет приём, но показывает, как мы принимаем решения без импровизаций.
    Выяснить больше – наркологическая клиника воронеж

  42. Наркологическая клиника в Ростове-на-Дону предоставляет полный спектр услуг по диагностике, лечению и реабилитации пациентов с алкогольной и наркотической зависимостью. Применение современных медицинских протоколов и индивидуальный подход к каждому пациенту обеспечивают высокую эффективность терапии и снижение риска рецидивов.
    Выяснить больше – частная наркологическая клиника в ростове-на-дону

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注