蓝屏,谁之过?

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

  1. Многие думают, что если стало легче днём, значит, всё позади. Но часто к вечеру усиливается тревога, растёт внутреннее напряжение, сон не приходит, начинается паника, а тело снова «разгоняется» — тахикардия, потливость, тремор. Это связано с нестабильностью нервной системы и колебаниями вегетативных реакций после отмены. Если человек не понимает, что делать, он может сорваться, и запой продолжится. Поэтому правильный вывод из запоя всегда включает план на ночь: как организовать спокойную обстановку, что контролировать, какие симптомы допустимы, а какие опасны и требуют срочного обращения.
    Выяснить больше – http://vyvod-iz-zapoya-zhukovskij12.ru/vyvod-iz-zapoya-kruglosutochno-v-zhukovskom/

  2. Лечение в наркологической клинике в Чехове удобно не только близостью к дому. Главный плюс — комплексный подход. Зависимость практически никогда не ограничивается только алкоголем или наркотиком: страдают сердце и сосуды, печень, нервная система, психика, отношения в семье и на работе. Если пытаться лечить только одно звено, например, периодически «чистить кровь» капельницами, без проработки причин и последствий, ситуация быстро возвращается к исходной точке. В клинике выстраивается последовательная работа: сначала стабилизируют организм, затем укрепляют психику, а дальше помогают менять привычный образ жизни, чтобы трезвость стала не кратким эпизодом, а новой нормой.
    Изучить вопрос глубже – http://narkologicheskaya-klinika-chekhov11.ru/

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

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

  5. Далее выполняется медицинская детоксикация: корректируется водно-электролитный баланс, снимается интоксикация, поддерживается работа сердечно-сосудистой системы, снижается тремор, стабилизируется сон и тревожность. Важно, что схема подбирается индивидуально: при разных рисках объём поддержки будет различаться. В ряде случаев достаточно амбулаторного наблюдения и рекомендаций, в других — нужен стационар, чтобы контролировать динамику и вовремя корректировать терапию.
    Получить дополнительную информацию – http://vyvod-iz-zapoya-moskva1-12.ru

  6. При употреблении психоактивных веществ риск осложнений часто выше и непредсказуемее: неизвестный состав, сочетания, влияние на сердечный ритм, дыхание и психическое состояние. Поэтому детоксикация при наркотической зависимости строится особенно аккуратно: врач оценивает состояние, собирает информацию о симптомах, возможных сочетаниях и прошлых осложнениях, а затем выбирает тактику стабилизации. Важно, что в таких случаях «сделать быстро и без вопросов» — самый опасный подход.
    Узнать больше – narkologicheskaya klinika v oblasti

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

  8. Для пациентов, требующих круглосуточного наблюдения, клиника «Полярис» предлагает стационар VIP-класса. Здесь созданы все условия для быстрого восстановления: удобные палаты, индивидуальное меню, зоны отдыха и консультации профильных специалистов.
    Подробнее можно узнать тут – платная наркологическая клиника

  9. Помощь начинается с первичной оценки. Врач уточняет длительность запоя, время последнего приёма алкоголя, ведущие симптомы, хронические заболевания, прошлые осложнения, аллергии, а также препараты, которые пациент уже принимал самостоятельно. Далее проводится осмотр: измеряются давление и пульс, оценивается дыхание, температура, признаки обезвоживания, уровень сознания, выраженность тремора и тревоги. На основании этой информации выбирается тактика и формат — на дому, амбулаторно или в стационаре, если риски высокие.
    Подробнее – http://vyvod-iz-zapoya-orekhovo-zuevo12.ru/vyvod-iz-zapoya-na-domu-v-orekhovo-zuevo/

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

  11. Снижается тремор, уменьшается тошнота, пульс и давление перестают «скакать», появляется возможность уснуть без паники. Важно не перегружать этот эффект разговорами «по душам», яркими экранами и проверками «на прочность»: когда среда тихая и затемнённая, организм закрепляет улучшение, а не теряет его к полуночи.
    Разобраться лучше – vyvod-iz-zapoya-na-domu

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

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

  14. Прежде всего необходимо убедиться, что учреждение официально зарегистрировано и обладает соответствующей лицензией на медицинскую деятельность. Этот документ выдается Минздравом и подтверждает соответствие установленным нормам.
    Углубиться в тему – http://lechenie-narkomanii-yaroslavl0.ru/

  15. Наркологическая клиника «Южный МедКонтроль» объединяет современные медицинские технологии, опыт специалистов и уважительное отношение к каждому пациенту. Здесь создаются условия для безопасного и результативного лечения зависимостей любой сложности — от алкогольной до полинаркотической. Центр работает в круглосуточном режиме, предлагая выезд врачей на дом, детоксикацию, кодирование и длительные программы реабилитации. Основная цель специалистов — восстановление физического и психологического равновесия человека, возвращение способности к полноценной жизни без зависимости.
    Подробнее тут – наркологическая клиника в ростове-на-дону

  16. Когда зависимость начинает диктовать настроение, сон и решения, человеку обычно нужно не «поговорить о силе воли», а получить понятную медицинскую помощь: оценку состояния, безопасную стабилизацию и план лечения, который снижает риск повторного ухудшения. В реальности обращаются по разным поводам: затяжной запой, тяжёлая абстиненция, приступы тревоги и бессонницы после прекращения употребления, срыв на фоне стресса, проблемы с контролем дозы или ситуации, когда близкие уже видят явное ухудшение и не понимают, как действовать. Наркологическая клиника в Пушкино — это формат, где помощь организована по шагам: сначала снимают острые риски, затем восстанавливают сон и базовую физиологию, после чего переходят к лечению зависимости как процесса, а не разовой процедуры. Такой подход важен потому, что кратковременное облегчение без дальнейшей работы часто заканчивается возвращением к употреблению в первые недели, когда нервная система ещё нестабильна.
    Детальнее – http://narkologicheskaya-klinika-pushkino12.ru/telefon-narkologicheskoj-kliniki-v-pushkino/

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

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

  19. Часто предприниматели объединяют понятия тендер и госзакупки, так как обе процедуры связаны с конкурсным выбором поставщика. Однако между ними существуют определённые различия, которые важно понимать перед началом работы в этой сфере.
    Полный разбор — только здесь – https://tendernoe-soprovozhdenie-rostov-na-donu.ru/

  20. Домашняя помощь эффективна, когда пациент контактный, сохранен, способен выполнять назначения и нет признаков высокой угрозы осложнений. Но удобство не должно подменять безопасность. Именно поэтому врач на выезде уточняет длительность употребления, время последнего приёма алкоголя или вещества, выраженность симптомов, хронические заболевания, лекарства, которые человек принимал самостоятельно, и возможные осложнения в прошлом.
    Исследовать вопрос подробнее – http://narkolog-na-dom-pushkino12.ru/vyzvat-narkologa-na-dom-v-pushkino/https://narkolog-na-dom-pushkino12.ru

  21. Острые состояния требуют особенно аккуратного подхода, потому что при резкой отмене алкоголя или ряда веществ возможны волнообразные ухудшения. Сегодня стало легче — через несколько часов снова накрывает тремором, паникой, скачками давления или бессонницей. Поэтому грамотная помощь всегда начинается с очного осмотра и оценки жизненно важных показателей. Если состояние нестабильно, предпочтительнее стационар, где можно наблюдать динамику и быстро корректировать терапию. Если риски умеренные и человек сохранен, возможен выезд врача на дом, но с чёткими критериями, при которых нужно немедленно переводить пациента под круглосуточное наблюдение.
    Ознакомиться с деталями – http://narkologicheskaya-klinika-moskva12.ru/chastnaya-narkologicheskaya-klinika-v-moskve/https://narkologicheskaya-klinika-moskva12.ru

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

  23. Алкогольная зависимость — хроническое заболевание, требующее своевременного вмешательства специалистов. В условиях нашего города круглосуточная анонимная помощь позволяет начать лечение без откладываний и в привычной обстановке. Клиника «Северная Звезда» предлагает комплексный подход: вызов врача на дом или стационарное пребывание в условиях полной конфиденциальности. Профессиональная команда обеспечивает детоксикацию, психологическую реабилитацию и последующую поддержку, помогая пациенту сделать первый шаг к новой, свободной от алкоголя жизни.
    Получить больше информации – http://www.domen.ru

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

  25. Наркологическая клиника в Краснодаре рассматривается как специализированное медицинское учреждение, ориентированное на лечение зависимостей с обеспечением полной конфиденциальности и круглосуточного доступа к помощи. В клинике «Южный Контур» лечение организовано таким образом, чтобы пациент мог обратиться за медицинской поддержкой в любое время суток без риска разглашения персональной информации. Такой формат особенно актуален при острых состояниях, требующих немедленного врачебного вмешательства и постоянного контроля.
    Узнать больше – https://narkologicheskaya-clinica-v-krasnodare19.ru/narkologa-na-dom-krasnodar/

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

  27. Для наглядности представлена таблица с основными этапами лечения и их характеристиками:
    Изучить вопрос глубже – http://www.domen.ru

  28. Отдельная причина, по которой люди тянут до последнего, — страх огласки и лишних последствий. В небольших городах это особенно чувствуется: «все друг друга знают», страшно, что увидят знакомые, начнутся разговоры. Из-за этого человек часто выбирает опасный компромисс: продолжает пить «чтобы не ломало», смешивает алкоголь со снотворными или успокоительными, пытается пережить бессонные ночи и панические качели. Но зависимость не ждёт, пока станет удобно. Поэтому важно, чтобы клиника могла организовать помощь быстро и без лишнего стресса, при этом сохраняя медицинскую точность и безопасность.
    Детальнее – http://narkologicheskaya-klinika-zhukovskij12.ru

  29. Соблюдение конфиденциальности в клинике «Точка Опоры» является неотъемлемой частью лечебного процесса. Наркологическая клиника в Краснодаре обеспечивает закрытый формат приёма, хранения медицинских данных и взаимодействия с пациентом. Практика показывает, что анонимное обращение снижает уровень тревожности, способствует более открытому диалогу с врачом и повышает точность клинической диагностики.
    Углубиться в тему – наркологическая клиника клиника помощь

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

  31. Клиника создана как современное пространство для безопасного восстановления. Здесь пациенты получают комплексную помощь в комфортных условиях. Основные преимущества учреждения:
    Исследовать вопрос подробнее – анонимная наркологическая клиника в ростове-на-дону

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

  33. Клиника «Полярис» предлагает круглосуточную наркологическую помощь в Архангельске и области. Главные преимущества — выезд врача на дом в течение 30 минут и условия VIP-уровня в стационаре. Здесь используются передовые методы детоксикации, индивидуальный подход и комплексная психотерапевтическая поддержка, что позволяет пациенту максимально быстро и безопасно справиться с алкогольной зависимостью.
    Ознакомиться с деталями – наркологическая клиника архангельск.

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

  35. Когда требуется нарколог на дом, обычно речь идёт не о «консультации на будущее», а о ситуации, которая уже мешает жить здесь и сейчас: затяжной запой, тяжёлая абстиненция, сильная тревога и бессонница, тремор, скачки давления, рвота, выраженная слабость, паника или состояние, при котором человек не готов ехать в клинику. В Пушкино выездная помощь востребована ещё и потому, что многим важно сохранить приватность и не вовлекать лишних людей: дома проще согласиться на осмотр, не тратить силы на дорогу и избежать стрессовой смены обстановки. В наркологической клинике «Стабильный Выбор» выезд врача строится по принципу «быстро, но безопасно»: сначала оценка состояния и рисков, затем индивидуальная тактика стабилизации и понятный план на ближайшие часы и сутки.
    Подробнее можно узнать тут – нарколог на дому капельница цена пушкино

发表回复

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