蓝屏,谁之过?

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

18,198 条评论

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

  2. Круглосуточный приём означает не просто «дверь открыта 24/7», а способность команды держать безопасный и предсказуемый темп в любой час. Ночью — короткие поведенческие включения и мягкая коррекция тревоги, днём — уточнение витальных и планирования питания/воды, вечером — «световые» правила и дыхательные циклы. За маршрутом следит куратор, благодаря чему переходы между форматами (дом – амбулатория – стационар) проходят без «перезапуска истории»: все данные и договорённости продолжают работать, не требуя заново пересказывать детали.
    Углубиться в тему – наркологические клиники алкоголизм

  3. Экстренный вывод из запоя — это цепочка управляемых медицинских действий, а не «сильная капельница на удачу». В наркологической клинике «ВитаМед Воронеж» круглосуточные бригады работают по единым протоколам: от телефонного триажа и «тихого» выезда без опознавательных знаков до адресной инфузионной терапии и вечерних онлайн-вставок. Мы планируем вмешательства так, чтобы в первые часы безопасно стабилизировать состояние, вернуть переносимость воды и тёплой, щадящей пищи малыми порциями, выровнять частоту пульса к сумеркам и обеспечить физиологичный сон без переседации. Анонимность встроена в каждый шаг: нейтральные формулировки в документах, немаркированный транспорт, доступ к карте наблюдения по ролям и «беззвучные» уведомления.
    Подробнее тут – вывод из запоя дешево воронеж

  4. Если при первичном звонке фиксируем «красные флаги» (угнетение сознания, выраженная одышка, резкое падение SpO?, нестабильная аритмия), сразу предлагаем стационарное наблюдение с ночным постом. При низких рисках начинаем дома, но держим низкий порог для эскалации, чтобы не терять время, если состояние меняется.
    Получить больше информации – https://narkolog-na-dom-stavropol15.ru

  5. Растворы восполняют дефицит воды и солей, поддерживают натрий, калий, магний и другие элементы. Солевая основа помогает нормализовать объем циркулирующей жидкости. При отдельных показаниях в лечение включаются глюкоза, раствор Рингера, витаминные комплексы, антиоксиданты и препараты для защиты внутренних органов. Витамины B1 и другие компоненты поддерживают обменные процессы, а минеральные вещества необходимы для нормальной работы нервной и сердечно-сосудистой систем.
    Дополнительная информация – kapelnica-ot-zapoya-na-domu-moskva-nedorogo

  6. Абстинентный синдром развивается после прекращения или значительного уменьшения привычной дозы алкоголя. У человека может появляться тремор рук, тошнота, рвота, бессонница, раздражительность, тревожность, головная боль, слабость, учащенный пульс и колебания артериального давления. Нередко пациент испытывает сильное желание снова принять спиртное, поскольку новая доза временно облегчает неприятные ощущения. Именно этот механизм часто поддерживает течение запоя и затрудняет самостоятельный выход.
    Узнать больше – https://vyvod-iz-zapoya-reutov15.ru/

  7. Если на телефонном этапе выявляются «красные флаги» — спутанность, выраженная одышка, «скачущий» ритм, неукротимая рвота, — мы рекомендуем короткое окно стационарного наблюдения. При низком риске целесообразно начать дома: привычная среда снижает сенсорную нагрузку, а телемедицинские включения вечером по 15–20 минут помогают пройти «трудный час» без поездок.
    Получить дополнительные сведения – вывод из запоя круглосуточно в калининграде

  8. Специалисты регулярно помогают при интоксикации, запоях, абстиненции и сложных состояниях зависимости.
    Изучить вопрос подробнее – narkolog-besplatno-moskva

  9. Индивидуальный план формируется после первичной оценки. В него могут входить медикаментозное лечение, инфузионная терапия, психотерапия, консультации психолога, кодирование от алкоголизма и реабилитационный курс. Используем современные методы, которые позволяют учитывать не только разновидность зависимости, но и характер заболевания, мотивацию, семейную ситуацию и опыт предыдущего лечения. Если человек уже проходил лечение, но столкнулся со срывом, программа корректируется с учетом причин рецидивов.
    Дополнительная информация – https://narkologicheskaya-klinika-moskva15.ru

  10. Симптоматика ломки может варьироваться: от бессонницы, сильной тревожности и раздражительности до выраженных физически болезненных ощущений, таких как мышечные спазмы, судороги, потливость, головокружение и тошнота. В критических ситуациях, когда симптомы достигают остроты, своевременная медицинская помощь становится жизненно необходимой для предотвращения осложнений и стабилизации состояния пациента.
    Изучить вопрос глубже – http://snyatie-lomki-novosibirsk8.ru

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

  12. Такая карта снимает неопределённость. Пациент понимает, чего ожидать; родственники — когда и по каким метрикам судить об успехе; команда — что именно корректировать, чтобы сохранить управляемость терапии даже ночью.
    Подробнее тут – наркологическая клиника наркологический центр в мурманске

  13. При наличии этих симптомов организм находится в критическом состоянии, и любой промедление с вызовом врача может привести к развитию серьезных осложнений, таких как сердечно-сосудистые нарушения, тяжелые неврологические симптомы или даже жизнеугрожающие состояния. Экстренное вмешательство позволяет не только снять острые симптомы ломки, но и предотвратить необратимые изменения в организме.
    Разобраться лучше – http://

  14. Наркологическая клиника использует стандарт безопасности, при котором схема лечения назначается только по результатам осмотра. Самый дорогой набор препаратов не означает самый качественный вариант. Важнее, чтобы лечение соответствовало состоянию пациента и проводилось лицензированным специалистом. Именно индивидуальный подбор помогает провести вывод из запоя безопаснее.
    Дополнительная информация – moskva-vyvod-iz-zapoya

  15. В Красноярске вызов нарколога на дом помогает быстро начать лечение при алкогольной зависимости, абстинентном синдроме и других проблемах. Специалист оценивает состояние организма, длительность употребления, стаж алкоголизма, возраст и наличие хронических заболеваний. Если домашний формат безопасен, врач может провести капельницу, назначить препараты и дать рекомендации. При тяжелых нарушениях требуется госпитализация и лечение в стационаре.
    Ознакомиться с деталями – https://4.narcolog-na-dom-krasnoyarsk0.ru/

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

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

  18. Мы рассмотрим современные вызовы здравоохранения и пути их решения с помощью технологий и научных исследований. В статье собраны данные о новых лекарствах, методах диагностики и системном подходе к улучшению здоровья населения.
    Это ещё не всё… – лечение алкоголизма частный медик 24

  19. Если ожидаемая динамика «плоская», мы не усиливаем всё сразу. Меняется один параметр: скорость инфузии, порядок модулей или длительность вечерних включений. Такой «тонкий ремонт» безопаснее тотальной перестройки и лучше сохраняет ясность днём.
    Подробнее – https://narkologicheskaya-klinika-v-voronezhe15.ru/voronezh-narkologiya/

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

  21. Для успешного и безопасного очищения организма от наркотиков применяются методы медикаментозной поддержки, что способствует уменьшению риска осложнений и облегчению состояния пациента.
    Разобраться лучше – https://lechenie-narkomanii-novosibirsk0.ru/lechenie-narkomanii-v-novosibirske-besplatno/

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

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

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

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

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

  27. При поступлении вызова наши опытные специалисты незамедлительно приступают к комплексной диагностике состояния пациента. Первая задача – оценить уровень интоксикации и тяжесть симптомов, что включает измерение показателей артериального давления, пульса, температуры тела, а также уровня насыщения крови кислородом. На основании собранных данных формируется индивидуальная схема лечения, которая направлена на быстрое снятие симптомов ломки и стабилизацию нервной и иммунной систем.
    Углубиться в тему – http://snyatie-lomki-novosibirsk8.ru

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

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

  30. Telefonumdan bahis oynamak istiyordum ama tarayıcı sürekli donuyordu. 1xbet indir — aradığımda bir sürü site çıktı. Canlı bahis, canlı yayın, kupon oluşturma hepsi tek yerde. 1xbet mobil uygulama — Kaçırmak imkansız. Eğer siz de 1xbet’i telefonda kullanmak istiyorsanız. 1xbet indir android 1xbet indir android Linke göz atın için Türkiye. En güvenilir yol bu. 1xbet indir — her yerde, her zaman bahis keyfi!

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

  32. Все шаги фиксируются в карте наблюдения. Если динамика «плоская», меняется один параметр (скорость/объём/последовательность), и через оговорённое окно проводится повторная оценка. Это снижает риск побочных реакций и сохраняет дневную ясность.
    Получить дополнительную информацию – вывод из запоя на дому круглосуточно в калининграде

  33. Анонимность — важнейшее условие обращения за помощью. В клинике действуют не декларации, а конкретные технологические и организационные меры, которые защищают пациента и его близких от стигмы и лишнего обсуждения.
    Выяснить больше – https://narkologicheskaya-klinika-rostov-na-donu14.ru/narkologiya-rostov-kruglosutochno

发表回复

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