蓝屏,谁之过?

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

6,371 条评论

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

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

  3. Good afternoon!
    Choose specific professions reputations or gear sets to include in your custom package.
    Prepare for Northrend adventures with our wotlk gold service that offers cheap delivery.
    More detailed information on the website – https://www.wow-power-leveling.org/cheap-World-of-Warcraft-US-Power-Leveling.html
    dragonflight gold, wow boosting, wow gold price
    wow gold instant delivery, wow dungeon boost, wow level boost
    Good luck and good gameplay!

  4. Детоксикация — это медицинская стабилизация при интоксикации и тяжёлой отмене. Она помогает снизить нагрузку на организм, скорректировать обезвоживание и водно-электролитные нарушения, уменьшить выраженность тремора, потливости, тошноты, стабилизировать давление и пульс, снизить тревогу и восстановить сон. Но важно понимать границы результата: после длительного запоя организм не восстанавливается мгновенно, слабость и эмоциональная неустойчивость могут сохраняться в первые сутки.
    Подробнее можно узнать тут – narkologicheskaya-klinika-orekhovo-zuevo12.ru/

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

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

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

  8. Вывод из запоя на дому с быстрым облегчением в Екатеринбурге является эффективным методом для тех, кто хочет быстро избавиться от неприятных симптомов абстиненции, не выходя из дома. Основное преимущество этого метода — это быстрый результат, минимальные риски для здоровья и отсутствие необходимости в стационарном лечении. Процедура, проводимая опытным медицинским специалистом, помогает не только устранить симптомы похмелья, но и восстановить нормальное состояние организма без стресса и неудобств для пациента.
    Подробнее тут – http://www.domen.ru

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

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

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

  12. В клинике «Ресурс Трезвости» помощь строится по принципу маршрута. Сначала решают острые вопросы — интоксикация, абстиненция, нарушения сна, нестабильность давления и пульса, выраженная тревога. Затем — формируют план на 24–72 часа, потому что именно в первые дни чаще всего происходят повторные срывы: вечером усиливается тревога, ночь проходит без сна, и человек возвращается к алкоголю или веществам «чтобы отпустило». После стабилизации клиника помогает перейти к следующему этапу — лечению зависимости и профилактике рецидива, чтобы результат не ограничивался кратким облегчением.
    Узнать больше – narkologicheskaya-klinika-orekhovo

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

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

  15. Для региона характерна потребность в системном подходе к лечению зависимостей, так как клиническая картина нередко сопровождается соматическими и неврологическими нарушениями. Организация лечения направлена на снижение рисков осложнений и восстановление физиологических функций организма.
    Разобраться лучше – https://narkologicheskaya-klinika-v-tolyatti0.ru/narkologicheskaya-bolnicza-tolyatti/

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

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

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

  19. Нарколог на дом в Москве: срочный выезд врача, капельницы и помощь при запое в наркологической клинике «Клиника доктора Калюжной».
    Ознакомиться с деталями – запой нарколог на дом

  20. Вызов нарколога на дом в Хабаровске осуществляется при наличии клинических показаний, при которых выездная помощь является обоснованной и безопасной. В клинике «Ясный Вектор» решение о формате вмешательства принимается с учётом жалоб, анамнеза и предполагаемой тяжести состояния.
    Детальнее – http://narkolog-na-dom-khabarovsk0.ru

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

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

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

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

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

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

  27. Детоксикация — это медицинская стабилизация при интоксикации и тяжёлой отмене. Она помогает снизить нагрузку на организм, скорректировать обезвоживание и водно-электролитные нарушения, уменьшить выраженность тремора, потливости, тошноты, стабилизировать давление и пульс, снизить тревогу и восстановить сон. Но важно понимать границы результата: после длительного запоя организм не восстанавливается мгновенно, слабость и эмоциональная неустойчивость могут сохраняться в первые сутки.
    Исследовать вопрос подробнее – https://narkologicheskaya-klinika-orekhovo-zuevo12.ru/narkologicheskaya-klinika-sajt-v-orekhovo-zuevo

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

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

  30. Ребята, статья про SEO как «игру в долгую». Автор развенчивает миф о «бесплатном трафике» и объясняет, почему SEO — это владение цифровой недвижимостью, а не аренда. Понравилась метафора про фундамент здания: если строите на песке — первый же апдейт алгоритмов разрушит всё. Есть блок про E-E-A-T и про то, как SEO заставляет бизнес становиться лучше. Рекомендую: https://mandaringpd.ru/stati/seo-kak-fundament-biznesa-pochemu-igra-v-dolguju-edinstvennaja-strategija-kotoraja-okupaetsja/

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

发表回复

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