蓝屏,谁之过?

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

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

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

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

  4. Клиника начинает лечение с обследования. Врач собирает анамнез, выясняет длительность употребления, характер зависимости и сопутствующие заболевания. Клинические данные позволяют определить состояние нервной системы, психики и внутренних органов. При необходимости проводится дополнительная диагностика, а результаты используются при выборе терапии.
    Изучить вопрос подробнее – https://narkologicheskaya-klinika-v-krasnoyarske18.ru/

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

  6. Мужик писал, что запой затянулся на две недели. Тот быстро приехал, осмотрел. Выведение из запоя в стационаре — И без доступа к спиртному. Потом стабилизируют состояние. Выведение из запоя в стационаре СПб — Без лишнего риска. Советую глянуть источник: круглосуточный вывод из запоя круглосуточный вывод из запоя Там и про вывод из запоя в клинике для жителей Северной столицы. Иногда стационар — единственный выход.

  7. Самостоятельный отказ от спиртного кажется простым решением, однако при зависимости резкая отмена способна усиливать тревогу, бессонницу, вегетативные реакции и судорожную готовность. Некоторые люди пытаются сделать домашний детокс, используют седативные препараты без назначения или снова выпивают, чтобы стало легче. Такое поведение повышает риск отравления, угнетения дыхания и опасного сочетания медикаментов с алкоголем.
    Узнать больше – pomoshch-vyvod-iz-zapoya

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

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

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

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

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

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

  14. Состояние пациента отслеживается на каждом этапе, от первичной консультации до дальнейших рекомендаций.
    Ознакомиться с деталями – https://narcolog-na-dom-krasnoyarsk3.ru/

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

  16. Наркологическая помощь охватывает несколько последовательных этапов. Иногда требуется только медицинский вывод из непродолжительного запоя, однако при хроническом алкоголизме или наркозависимости эффективное лечение обычно имеет комплексный характер. Врач может рекомендовать детоксикацию, дальнейшее лечение алкоголизма, кодирование и реабилитацию. При наркотической зависимости лечение включает снятие ломки, стабилизацию физического состояния, психиатрическую помощь и работу психолога.
    Изучить вопрос подробнее – http://1narkologicheskaya-klinika-balashiha.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  31. Говорила, что всё нормально, а сама не спала ночами. А состояние ухудшалось. Психиатр на дом — Разговаривает, оценивает состояние. И только после этого становится легче. Детский психиатр на дом — И для детей. Советую глянуть источник: психотерапевт на дом москва психотерапевт на дом москва И про консультацию на дому для Московской области. Обращайтесь к специалистам.

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

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

  34. Каждый профиль решает одну задачу и имеет ожидаемую динамику. Мы избегаем параллельных «усилений», чтобы не «замазывать» вклад отдельного шага и не перегружать организм.
    Исследовать вопрос подробнее – вызов наркологической помощи

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

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

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

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

发表回复

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