蓝屏,谁之过?

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隐藏得太深,总让人捉摸不定!>

10,362 条评论

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

  2. Информация об обращении не передается третьим лицам, а детали лечения обсуждаются только с пациентом.
    Подробнее можно узнать тут – вывод из запоя

  3. Ситуации, требующие срочного лечения, часто связаны с длительным употреблением спиртных напитков. Однако с течением времени теряется чувство меры, для достижения состояния опьянения нужны большие дозы алкоголя — постепенно развивается алкогольная зависимость. Острая интоксикация продуктами распада этанола запускает тяжелый абстинентный синдром, который в Люберцах и соседних городах, таких как Королев, Мытищи, Химки и Балашиха, становится частой причиной обращений за экстренной наркологической помощью. Специалисты нашего центра настоятельно рекомендуют не откладывать терапию при появлении признаков белой горячки, судорогах, резком скачке артериального давления и неадекватном поведении зависимого. За долгие годы лечения алкоголизма и наркомании наши наркологи сталкивались с различными ситуациями, поэтому врач быстро подберет оптимальную для конкретного пациента схему терапии.
    Подробнее тут – вызов нарколога на дом капельница

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

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

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

  7. Слушайте кто знает Ситуация критическая Соседи стучат в стену Таблетки не помогают Короче, единственный кто реально помог — вызвать нарколога на дом анонимно с препаратами Приехал через 40 минут В общем, вся инфа по ссылке — нарколог круглосуточно москва https://alkogolizm.narkolog-na-dom-moskva-abc.ru Звоните прямо сейчас Перешлите тем кто в такой же ситуации

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

  9. Наркологическая клиника оказывает лечение на дому, амбулаторно и в стационаре. Нарколог проводит осмотр, назначает препараты, ставит капельницу, применяет средства для устранения абстиненции, нормализации сна, водно-солевого баланса, функций печени, сердца и нервной системы. Лечение проводится анонимно, с учетом возраста, пола, стажа приема спиртных напитков, физического и психического состояния человека, а также стадии алкогольной зависимости.
    Узнать больше – вывод из запоя анонимно

  10. Мамы и папы слушайте Учителя со своими закидонами Нервы ни к чёрту у всей семьи Короче, единственная школа где кайфово учиться — онлайн школа с 1 по 11 класс с индивидуальным подходом Ребёнок учится и не перегружается В общем, жмите чтобы не потерять — онлайн школа для школьников онлайн школа для школьников Переходите на нормальное обучение Перешлите другим родителям

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

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

  13. Привет, народ То сроки по две недели Никто не знает как нормально перевести деньги за рубеж Короче, нашел нормальный сервис — платежи по всему миру с гарантией Поставщик получил оплату вовремя В общем, вся инфа вот здесь — международные платежные системы https://onlajn-z65.mezhdunarodnye-platezhi-vek.ru Используйте нормальный сервис Перешлите тому кто работает с зарубежными поставщиками

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

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

  16. DK88 online casino brings popular gaming options and regular rewards together on one accessible platform.
    dk88

  17. Быстро собираем первичную информацию, оцениваем риски и предлагаем подходящий вариант обращения.
    Подробнее можно узнать тут – vyvod-iz-zapoya-v-moskve-stacionar

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

  19. Эти действия помогают быстро восстановить водно-электролитный баланс и снизить нагрузку на внутренние органы. После проведения процедур врач дает рекомендации по дальнейшему наблюдению и реабилитации.
    Углубиться в тему – нарколог на дом цены в калининграде

  20. Алкогольный запой представляет собой тяжелое состояние, вызванное длительным бесконтрольным употреблением спиртных напитков. Без медицинского вмешательства вывести организм из запоя может быть сложно и даже опасно. Срочная помощь нарколога требуется при следующих признаках:
    Разобраться лучше – вызвать капельницу от запоя нижний новгород

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

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

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

  24. Алкогольный запой представляет собой тяжелое состояние, вызванное длительным бесконтрольным употреблением спиртных напитков. Без медицинского вмешательства вывести организм из запоя может быть сложно и даже опасно. Срочная помощь нарколога требуется при следующих признаках:
    Подробнее можно узнать тут – вызвать капельницу от запоя нижний новгород

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

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

  27. Для вызова специалиста необходимо позвонить на горячую линию или оставить заявку через официальный сайт, например, на портале государственных услуг. Специалист приедет в оговоренное время, обеспечив полную анонимность и соблюдение медицинской тайны.
    Получить дополнительную информацию – нарколог на дом круглосуточно цены

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

  29. Алкогольный запой представляет собой тяжелое состояние, вызванное длительным бесконтрольным употреблением спиртных напитков. Без медицинского вмешательства вывести организм из запоя может быть сложно и даже опасно. Срочная помощь нарколога требуется при следующих признаках:
    Изучить вопрос глубже – капельница от запоя наркология в нижний новгороде

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

  31. Врач проводит полное обследование и определяет тактику лечения в зависимости от состояния пациента. Важным аспектом является возможность применения комплексных мер, включающих:
    Получить дополнительные сведения – http://narcolog-na-dom-kaliningrad00.ru/narkolog-na-dom-kaliningrad-czeny/

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

  33. После поступления вашего звонка специалист оперативно выезжает по указанному адресу в Нижнем Новгороде и проводит первичную диагностику. Врач измеряет основные жизненные показатели: артериальное давление, пульс, сатурацию кислорода в крови и оценивает степень алкогольной интоксикации. Затем подбирается индивидуальный состав капельницы, который позволяет максимально быстро снять симптомы похмелья и абстиненции.
    Детальнее – http://

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

  35. Алкогольный запой представляет собой тяжелое состояние, вызванное длительным бесконтрольным употреблением спиртных напитков. Без медицинского вмешательства вывести организм из запоя может быть сложно и даже опасно. Срочная помощь нарколога требуется при следующих признаках:
    Подробнее можно узнать тут – http://www.domen.ru

  36. В этой публикации мы обсуждаем современные методы лечения различных заболеваний. Читатели узнают о новых медикаментах, терапиях и исследованиях, которые активно применяются для лечения. Мы нацелены на то, чтобы предоставить практические знания, которые могут помочь в борьбе с недугами.
    Прочесть всё о… – https://trezvoe-obshchestvo.ru/stati/privivki-i-vaktsiny-mozhno-li-pit-alkogol.html

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

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

  39. Помогаем быстро перейти от консультации к конкретному плану: выезд, стационар или наблюдение.
    Получить больше информации – vyvod iz zapoya anonimno

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

  41. Наркологическая клиника оказывает лечение на дому, амбулаторно и в стационаре. Нарколог проводит осмотр, назначает препараты, ставит капельницу, применяет средства для устранения абстиненции, нормализации сна, водно-солевого баланса, функций печени, сердца и нервной системы. Лечение проводится анонимно, с учетом возраста, пола, стажа приема спиртных напитков, физического и психического состояния человека, а также стадии алкогольной зависимости.
    Подробнее можно узнать тут – http://vyvod-iz-zapoya-v-lyubercah14-1.ru/

发表回复

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