蓝屏,谁之过?

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

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

  2. Лечение алкоголизма не заканчивается детоксикацией. После вывода из запоя важно продолжить лечение алкогольной зависимости: пройти обследование, обсудить кодирование, психотерапию и реабилитацию. Такая программа помогает не просто пережить запой, а восстановить здоровье и научиться жить без алкоголя.
    Ознакомиться с деталями – https://vyvod-iz-zapoya-v-ekaterinburge26.ru/

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

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

  5. Наркологическая служба работает с совершеннолетними пациентами, столкнувшимися с алкогольной зависимостью, длительным употреблением алкоголя и последствиями интоксикации. Вызов можно оформить на дом, а при наличии тяжелых симптомов организуется госпитализация в стационар. Нарколог проводит осмотр, измеряет пульс и давление, уточняет количество выпитого, длительность запоя, наличие хронических заболеваний и лекарственных противопоказаний. После диагностики индивидуально подбирается лечение, направленное на выведение токсинов, восстановление водно-электролитного баланса, нормализацию сна и снижение выраженности абстиненции.
    Подробнее – vyvod-iz-zapoya-v-moskve-nedorogo

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

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

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

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

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

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

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

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

  14. Вызов начинается со звонка или заявки. Консультант уточняет адрес, район, длительность запоя, возраст пациента и основные жалобы. После этого врач или бригада выезжает домой. В Красноярске выезд организуется с учетом дорожной ситуации и доступности специалиста.
    Подробнее – вызов нарколога на дом в Красноярске

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

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

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

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

  19. Нарколог оценивает выраженность абстиненции и общее самочувствие. Домашний формат подходит не всем: при тяжелом течении требуется госпитализация. Родителям, супругу и другим родственникам не надо самостоятельно подбирать сильные медикаменты, особенно если пациент уже принимал седативные препараты, наркотики или лекарства без назначения.
    Ознакомиться с деталями – https://vyvod-iz-zapoya-v-ekaterinburge25.ru/

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

  21. Родственники иногда пытаются снять похмельную симптоматику успокоительными, обезболивающими средствами, витаминами или самостоятельно найденными лекарствами. Однако некоторые препараты несовместимы с алкоголем и могут влиять на сердце, давление, дыхание и нервную систему. Даже стандартная капельница должна ставиться только после медицинского осмотра.
    Ознакомиться с деталями – вызвать нарколога на дом

  22. Центр проводит не только срочный вывод из запоя. Комплексное лечение алкогольной зависимости может включать детокс, медикаментозное восстановление, психотерапию, кодирование, психологическую поддержку, работу с родственниками и реабилитационные программы. Такой подход помогает не ограничиваться снятием похмельного синдрома, а начать лечение причин зависимого поведения и сформировать план возвращения к трезвой жизни.
    Узнать больше – vyvod-iz-zapoya-v-stacionare-moskva

  23. Клиника принимает пациентов из Балашихи, других городов Московской области и Москвы. Московская область имеет большое количество частных центров, поэтому при выборе важно смотреть не только на стоимость, но и на лицензии, квалификацию врачей, условия пребывания и содержание программы лечения. В клинике помощь оказывается анонимно, данные пациентов защищены, а лечение можно проходить амбулаторно, на дому или в стационаре. Круглосуточная служба позволяет вызвать нарколога в выходных и будних днях, а при необходимости организовать помещение пациента в стационар.
    Изучить вопрос подробнее – narkologicheskaya-klinika-na-dom

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

  25. Помогаем быстро перейти от консультации к конкретному плану: выезд, стационар или наблюдение.
    Дополнительная информация – vyvod-iz-zapoya-kruglosutochno

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

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

  28. Лечение наркомании строится с учетом вида вещества, частоты приема и общего здоровья. При употреблении опиоидов, стимуляторов, кокаина и других наркотиков клиника может провести детоксикационную терапию и снятие ломки. Лечение наркомании в стационаре дает возможность контролировать пациентов круглосуточно, что особенно важно в первые дни отказа от наркотиков.
    Ознакомиться с деталями – https://4narkologicheskaya-klinika-balashiha.ru/

  29. Бывает, сидишь с телефона. Всё быстрее и под рукой. 1xbet скачать apk — А не с сомнительного файлообменника. Ставки, история, баланс — всё на месте. 1xbet скачать ios без app store — Через сайт букмекера. Можете ознакомиться по ссылке: 1xbet mobile online 1xbet mobile online И про то, где скачать без риска для айфона. И всё работает без проблем.

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

  31. Чтобы обеспечить безопасное выведение психоактивных веществ и восстановление организма, применяется детоксикация под контролем врача-нарколога и анестезиолога-реаниматолога.
    Узнать больше – http://lechenie-narkomanii-arkhangelsk0.ru/

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

  33. Нарколог на дому оценивает человека комплексно. Даже если родственники считают, что нужна только капельница, специалист сначала должен исключить противопоказания и опасные осложнения. Чем дольше продолжается употребление, тем важнее своевременно получить медицинскую помощь.
    Подробнее – https://narcolog-na-dom-ekaterinburg15.ru/

  34. Обращение за помощью особенно важно, когда состояние ухудшается с каждым днем. Человек может продолжать пить не ради удовольствия, а для того, чтобы уменьшить дрожь, тревогу и бессонницу. При этом новая доза алкоголя лишь временно снимает симптомы и поддерживает запойный цикл.
    Ознакомиться с деталями – https://4vyvod-iz-zapoya-podolsk77.ru/

  35. Нарколог обращает внимание на длительность запоя, количество выпитого, особенности поведения и жалобы пациента. При легком течении человек сохраняет ориентацию и способен выполнять рекомендации врача. При тяжелом течении могут развиваться панические атаки, депрессии, выраженный страх, судороги и галлюцинации. Психика становится нестабильной, поэтому иногда наряду с наркологом требуется психиатр. В клинике направление психиатрия позволяет оценивать алкогольные и другие психиатрические расстройства комплексно.
    Ознакомиться с деталями – https://2.vyvod-iz-zapoya-moskva1-13.ru

  36. Вывод из запоя в Москве в центре «Похмельная служба» — это медицинская помощь людям, которым трудно самостоятельно прекратить длительное употребление алкоголя и безопасно справиться с абстинентным синдромом. Наркологическая служба работает круглосуточно: врач может провести выезд на дом, оценить самочувствие зависимого, выполнить осмотр и диагностику, подобрать препараты для детоксикации либо рекомендовать лечение в клинике. При тяжелых случаях организуется госпитализация и дальнейшее наблюдение в стационаре. Помощь оказывается анонимно, с соблюдением конфиденциальности и учетом индивидуальных особенностей организма.
    Изучить вопрос подробнее – vyvod-iz-zapoya-moskva-vyzov-narkologa-na-dom

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

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

  39. Запой может длиться от нескольких дней до недель и месяцев, а его тяжесть зависит от стажа алкоголизма, количества напитков, возраста пациента, хронических болезней и общего физического ресурса. При продолжительном приеме спиртного токсичные продукты распада воздействуют на сердце, печень, почки, сосуды и нервную систему. Врач клиники учитывает эти факторы до начала лечения, поскольку попытка просто прокапаться по стандартной схеме подходит далеко не каждому пациенту.
    Изучить вопрос подробнее – vyvod-iz-zapoya-na-domu-v-podolske

发表回复

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