蓝屏,谁之过?

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,361 条评论

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

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

  3. Москва, всем привет Ситуация критическая Жена в истерике Нужен врач прямо сейчас Короче, только это реально спасло — услуги нарколога на дому профессионально Через пару часов человек пришёл в себя В общем, вся инфа по ссылке — вызов врача нарколога на дом москва https://stoimost.narkolog-na-dom-moskva-pcr.ru Нарколог на дом — это реальный выход Перешлите тем кто в такой же ситуации

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

  5. Как поясняет врач-нарколог клиники «АлкоСтоп», «грамотно составленная инфузионная терапия не только устраняет последствия запоя, но и создаёт условия для дальнейшей мотивации пациента к лечению».
    Детальнее – http://kapelnicza-ot-zapoya-pervouralsk11.ru/

  6. Особую опасность представляет белая горячка (алкогольный психоз). У пациента возникают галлюцинации, приступы паники, агрессивное поведение, дезориентация во времени и пространстве. Это состояние требует незамедлительного вмешательства врача, так как человек может представлять опасность для себя и окружающих.
    Исследовать вопрос подробнее – http://narcolog-na-dom-novokuznetsk00.ru

  7. Вывод из запоя в Мурманске представляет собой комплекс мероприятий, направленных на оказание медицинской помощи пациентам, находящимся в состоянии алкогольного отравления или длительного употребления спиртного. Процедура проводится с целью стабилизации состояния организма, предупреждения осложнений и минимизации риска развития тяжелых последствий алкоголизма.
    Получить больше информации – https://vyvod-iz-zapoya-v-murmanske12.ru/vyvod-iz-zapoya-na-domu-v-murmanske

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

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

  10. Эта публикация исследует взаимосвязь зависимости и психологии. Мы обсудим, как психологические аспекты влияют на появление зависимостей и процесс выздоровления. Читатели смогут понять важность профессиональной поддержки и применения научных подходов в терапии.
    А что дальше? – https://stop-alko.info/pohmele/bessonnitsa-pri-pohmelya.html

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

  12. Как поясняет врач-нарколог клиники «АлкоСтоп», «грамотно составленная инфузионная терапия не только устраняет последствия запоя, но и создаёт условия для дальнейшей мотивации пациента к лечению».
    Детальнее – капельница от запоя на дому первоуральск

  13. Этот этап лечения направлен на купирование острых симптомов, связанных с абстинентным синдромом. Пациенту назначаются современные препараты, способствующие выведению токсинов, нормализации работы сердца, печени, центральной нервной системы.
    Получить больше информации – https://narkologicheskaya-klinika-volgograd9.ru/chastnaya-narkologicheskaya-klinika-volgograd

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

  15. Особую опасность представляет белая горячка (алкогольный психоз). У пациента возникают галлюцинации, приступы паники, агрессивное поведение, дезориентация во времени и пространстве. Это состояние требует незамедлительного вмешательства врача, так как человек может представлять опасность для себя и окружающих.
    Подробнее тут – нарколог на дом цена новокузнецк

  16. Вывод из запоя в Люберцах требуется, когда зависимый употребляет алкоголь несколько дней, не может остановиться, плохо спит, чувствует тремор, слабость, тревогу, тошноту, скачки давления, потерю аппетита и признаки отравления продуктами распада этанола. В такой момент семье стоит не откладывать обращение, а заказать консультацию и вызвать врача. Наркологическая клиника подбирает лечение с учетом возраста, пола, анамнеза, длительности запойного эпизода, самочувствия пациента, сопутствующих заболеваний, стадии алкогольной зависимости и желания самого больного принять помощь.
    Детальнее – vyvod iz zapoya dzerzhinskij

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

  18. Лечение начинается с оценки клинической картины. Врач-нарколог проводит осмотр, при необходимости назначает обследование, ЭКГ, анализы, тест на употребление веществ, проверяет основные показатели, уточняет данные о принимаемых лекарствах, хронических диагнозах, аллергии, опыте кодирования и прошлых попытках остановиться. На этой основе назначается детоксикация: витаминно-минеральный раствор, средства для восстановления водно-солевого баланса, успокоительные препараты, нейропротекторы, кардиопротекторы, гепатопротекторы и другие медикаменты, которые улучшают самочувствие, поддерживают функции головного мозга, печени, сердца и нервной системы.
    Подробнее – vyvod iz zapoya lyubercy

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

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

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

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

  23. Особую опасность представляет белая горячка (алкогольный психоз). У пациента возникают галлюцинации, приступы паники, агрессивное поведение, дезориентация во времени и пространстве. Это состояние требует незамедлительного вмешательства врача, так как человек может представлять опасность для себя и окружающих.
    Узнать больше – нарколог на дом срочно

  24. Врач-нарколог проводит осмотр, собирает анамнез, оценивает клиническую картину, уточняет данные о лекарствах, прошлых кодированиях, хронических диагнозах, нарушениях сна и психики. При необходимости назначаются ЭКГ, анализы, тест на вещества, консультация психиатра или психотерапевта. В лечении используются солевой раствор, витамины, седативные препараты, гепатопротекторы, кардиопротекторы и средства, которые нормализуют обменные процессы, восстанавливают водно-солевой баланс и улучшают работу внутренних органов.
    Узнать больше – kruglosutochnyy-stacionar-vyvod-iz-zapoya

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

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

  27. Вывод из запоя в Химках — медицинская услуга для людей, которым необходимо безопасно прервать продолжительное употребление спиртного, уменьшить проявления абстинентного синдрома и стабилизировать работу организма. Запой опасен не только выраженным похмельем: продукты распада этанола оказывают токсическое влияние на клетки мозга, печень, сердце, сосудистую и нервную системы. У человека может резко изменяться артериальное давление, учащаться пульс, появляться рвота, тремор, бессонница, тревога, боль, судороги или галлюцинации. В таких ситуациях самостоятельное снятие симптомов лекарственными средствами из домашней аптечки способно привести к серьезным осложнениям, поэтому помощь лучше доверить опытному врачу.
    Углубиться в тему – vyvod-iz-zapoya-na-domu-kruglosutochno

  28. Кодирование от алкоголизма в Одинцово применяется как важный этап комплексного лечения алкогольной зависимости. Процедура помогает прекратить регулярное употребление спиртного, уменьшить патологическую тягу и получить время для восстановления здоровья, отношений и привычного ритма жизни. Частная наркологическая клиника принимает совершеннолетних пациентов анонимно, проводит предварительную диагностику и подбирает современные методы с учетом возраста, стажа алкоголизма, перенесенных болезней и личной мотивации.
    Изучить вопрос глубже – centr kodirovaniya ot alkogolizma

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

  30. Круглосуточная наркологическая служба организует лечение на дому и в клинике. Врач приезжает с лекарственными препаратами и диагностическим оборудованием, проводит обследование, подбирает дозы растворов и оценивает, возможно ли безопасно вывести человека в домашних условиях. Если требуется экстренное наблюдение, пациент направляется в стационарное отделение. Помощь оказывается анонимно, без постановки на государственный учет, с соблюдением требований к обработке персональных данных.
    Выяснить больше – vyvod iz zapoya lyubercy

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

  32. Длительное употребление спиртного приводит к формированию стойкой алкогольной зависимости. Причины запоя часто связаны с психологическими факторами, стрессом, социальными проблемами или попытками самостоятельно справиться с похмельем. У наркозависимых и лиц, страдающих алкоголизмом, запой развивается быстро, особенно при наличии хронических заболеваний внутренних органов, сердца и сосудистой системы. После продолжительного употребления алкоголя важно пропить курс препаратов, восстанавливающих функции печени (гепатопротекторы), витаминные комплексы, а также средства для улучшения работы жкт. Без своевременного вмешательства возникают тяжелые последствия: от интоксикации и абстинентного синдрома до галлюцинаций, судорог и риска инсульта или инфаркта.
    Детальнее – скорая вывод из запоя

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

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

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

  36. Помощь может включать консультацию, детоксикацию, стационар и дальнейшее сопровождение по показаниям.
    Исследовать вопрос подробнее – vyvod iz zapoya nedorogo

  37. Обратившись к нам, вы получите анонимное и безопасное лечение, полностью соответствующее медицинским стандартам.
    Разобраться лучше – врач нарколог на дом

发表回复

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