蓝屏,谁之过?

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

17,942 条评论

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

  2. Специалисты регулярно помогают при интоксикации, запоях, абстиненции и сложных состояниях зависимости.
    Получить больше информации – narkologicheskie-kliniki-v-oblasti

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

  4. В клинике в Сочи реализованы современные протоколы мониторинга состояния пациентов, включая лабораторные исследования и консультации профильных специалистов. Это позволяет своевременно корректировать лечение и минимизировать возможные осложнения. Более подробно о диагностике можно узнать на портале Российского общества наркологов.
    Разобраться лучше – https://narkologicheskaya-klinika-sochi0.ru/

  5. Стационарное лечение позволяет обеспечить круглосуточный контроль состояния, регулярное медицинское сопровождение и профессиональную поддержку психологов и наркологов. Такой подход существенно увеличивает шансы на успешное восстановление.
    Подробнее – http://narkologicheskaya-klinika-sochi0.ru/chastnaya-narkologicheskaya-klinika-sochi/

  6. Вывод из запоя — это управляемая медицинская процедура, где каждая деталь важна: от скорости выезда до состава инфузии и «тихой» среды дома. В наркологической клинике «КазаньДетокс Медлайн» мы придерживаемся принципа поэтапной стабилизации: сначала безопасный старт и оценка рисков, затем прицельные капельницы и, при необходимости, краткосрочное наблюдение. Такой подход исключает «универсальные коктейли» и делает результат прогнозируемым: снижение интоксикации, выравнивание вегетативных реакций, восстановление сна и аппетита. Анонимность встроена в протоколы: немаркированный выезд, лаконичная документация, один доверенный контакт для связи 24/7, нейтральные формулировки без стигмы.
    Выяснить больше – вывод из запоя с выездом

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

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

  9. Капельница от запоя в Москве применяется как медицинский метод детоксикации при алкогольной интоксикации и выраженном похмельном или абстинентном синдроме. Центр «Мед Алко» организует помощь круглосуточно: возможен выезд врача на дому либо проведение процедуры в стационаре. Нарколог оценивает общее состояние человека, длительность запоя, количество выпитого спиртного, наличие хронических заболеваний, показатели давления, пульса и уровень сознания. Только после осмотра подбирается индивидуальный состав капельницы, определяется объем раствора и решается вопрос, безопасно ли проводить лечение в домашних условиях.
    Ознакомиться с деталями – vyezdnye-kapelnicy-ot-zapoya-na-dom

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

  11. Текст посвящён распространённым мифам о зависимости и их развенчанию. Мы предоставим научно обоснованную информацию и дадим рекомендации по выбору эффективного способа борьбы с зависимым поведением.
    Это ещё не всё… – наркологическая клиника дельта в рязани

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

  13. Пил неделю, потом резко бросил. Трясло так, что чашку не мог удержать. Вызов нарколога на дом — Осматривает, ставит капельницу. Сначала уходит интоксикация. Выезд нарколога на дом — И в выходные. Можете ознакомиться по ссылке: экстренная наркологическая помощь на дому https://lomka.narkolog-na-domu-msk.ru И про срочный выезд для жителей столицы. Иногда промедление стоит здоровья.

  14. Лечение проводится поэтапно, начиная с оценки состояния и заканчивая восстановлением после интоксикации. Каждый этап направлен на устранение симптомов отравления и стабилизацию работы внутренних органов.
    Разобраться лучше – http://narkolog-na-dom-v-chelyabinske16.ru/

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

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

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

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

  19. Большое значение имеет возраст больного. Один человек после одинакового количества алкоголя переносит интоксикацию относительно легко, другому требуется усиленная медицинская помощь. На течение влияют хронические заболевания, масса тела, питание, работа печени и почек, состояние сосудов, использование седативных или снотворных средств. Поэтому универсальная капельница от запоя не существует: состав и длительность подбираются индивидуально, а решение о помощи на дому принимает врач.
    Подробнее – vyzov-na-dom-kapelnicy-ot-zapoya

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

  21. В Казани дежурят мобильные бригады, покрывающие центральные районы и спальные кварталы. Координатор по телефону собирает лишь данные, влияющие на безопасность: текущие лекарства и дозировки, аллергии, эпизоды судорог/психозов в анамнезе, последние значения АД/ЧСС, температуру, а также бытовые условия — место полулёжа, доступ к розетке, возможность «тихого окна» на 2–3 часа. Врач приезжает быстро, но спокойно; вместо суеты — последовательность и аккуратные действия. Визит начинается с очного осмотра, где фиксируются исходные показатели и выбирается контур терапии. Далее выполняется тест переносимости и только затем — основной инфузионный этап. По завершении пациент получает «вечерний протокол» с простыми ритуалами: приглушить свет, проветрить комнату, исключить экраны за час до сна, пить воду малыми глотками.
    Разобраться лучше – http://narkologicheskaya-pomoshh-v-kazani16.ru

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

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

  24. Услуги на дому особенно удобны пожилому человеку, больному в период восстановления, людям с ограниченной мобильностью и тем, кому врач назначил курс инфузионной терапии. Вызвать врача можно круглосуточно по телефону, оставив заявку оператору. Перед выездом специалист уточняет диагноз, симптомы, название препарата, дозировки, предыдущие реакции на лекарства и другие сведения, которые имеют значение для здоровья. Если требуется срочный вызов и присутствуют признаки острой угрозы жизни, выраженной интоксикации, нарушения сознания или тяжелого состояния, необходимо вызвать скорую помощь: капельница на дому не заменяет экстренное лечение в больнице.
    Получить больше информации – kapelnica-na-dom-anonimno

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

  26. Реабилитация включает как амбулаторные, так и стационарные программы, адаптированные под индивидуальные потребности пациента. Применяется когнитивно-поведенческая терапия и групповые занятия, что способствует формированию устойчивой мотивации и предотвращению рецидивов. Подробнее о методах реабилитации доступно на портале Всемирной организации здравоохранения.
    Получить дополнительную информацию – narkologicheskie kliniki alkogolizm sochi

  27. Столкнулись с бедой в семье. Куда звонить среди ночи. Наркологическая клиника в Екатеринбурге — В любое время суток. Объяснят, что делать дальше. Анонимная наркологическая помощь — Без лишних вопросов. Вся информация доступна здесь: нео плюс клиника https://vrach.narkologicheskaya-klinika-ekaterinburg-zfh.ru И про клиники для наркозависимых для области. Обращайтесь к специалистам.

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

  29. Состояние пациента отслеживается на каждом этапе, от первичной консультации до дальнейших рекомендаций.
    Изучить вопрос подробнее – капельница на дому

  30. Наркологическая клиника в Екатеринбурге уделяет большое внимание психотерапевтическим методам. Индивидуальный подход к пациенту позволяет выявить причины и особенности зависимости, сформировать устойчивую мотивацию на лечение и отказ от вредных привычек.
    Подробнее – http://narcologicheskaya-klinika-ekaterinburg00.ru

  31. В мегаполисе привычный ритм часто мешает системному лечению: плотный график, транспортные задержки, высокая социальная видимость. Чтобы терапия проходила спокойно, «НеоТрезвие СПБ» использует «немаркированную» логистику: нейтральные формулировки в документах, аккуратные визиты, разнесенные по времени консультации специалистов и персональный координатор. По желанию пациента часть этапов — образовательные сессии и посткодовое сопровождение — выполняются онлайн. Это снижает тревогу и делает маршрут лечения менее заметным для окружения.
    Подробнее можно узнать тут – https://kodirovanie-ot-alkogolizma-v-spb16.ru/kodirovanie-ot-alkogolizma-v-sankt-peterburge-czeny

  32. Капельница от запоя в Москве применяется для облегчения абстинентного синдрома, восполнения жидкости и поддержки организма при алкогольной интоксикации. Центр «Мед Алко» организует выезд на дому круглосуточно: бригада приезжает по адресу, доктор оценивает самочувствие больного и выбирает оптимальный состав инфузии. Такая помощь особенно востребована, когда запой затянулся на несколько суток, появилась тошнота, дрожь, слабость, бессонница или выраженная головная боль. Капельница ставится только при допустимом уровне риска, а при тяжелом течении требуется стационар клиники.
    Изучить вопрос подробнее – https://1.kapelnica-ot-zapoya-v-moskve14.ru/

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

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

  35. Наши специалисты оценивают клинические признаки запоя уже при первом осмотре — измеряют пульс, артериальное давление и насыщение кислородом, осматривают кожу и слизистые оболочки на предмет обезвоживания. Специальные тесты на когнитивные функции позволяют определить степень дезориентации и риск развития острых психотических реакций.
    Подробнее можно узнать тут – https://тайный-вывод-из-запоя.рф/vyvod-iz-zapoya-staczionar-v-samare

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

发表回复

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