蓝屏,谁之过?

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

  1. Нарколог на дом — это не «капельница по заказу». Запой и отмена алкоголя/веществ влияют на сердце, сосуды, дыхание, нервную систему, водно-электролитный баланс. Ошибка в тактике часто происходит именно тогда, когда пытаются действовать без оценки состояния: ставят капельницу без измерения давления, не учитывают уже принятые препараты, не спрашивают о судорогах и проблемах с сердцем. На выезде врач измеряет давление и пульс, оценивает дыхание, температуру, уровень сознания, признаки обезвоживания, выраженность тремора и тревоги. После этого выбирается безопасная схема помощи и объясняется ожидаемая динамика.
    Получить больше информации – vyezd-narkologa-na-dom-cena

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

  3. Коммерческий и государственный тендер — это конкурентная процедура выбора поставщика товаров или оказания услуг. Заказчик размещает требования, а компании подают заявки и участвуют в торгах.
    Глубже в тему — здесь – http://tendernoe-soprovozhdenie-rostov-na-donu.ru

  4. Помощь при зависимостях в клинике «Южный Вектор» базируется на клинической диагностике, позволяющей определить стадию расстройства и сопутствующие нарушения. Наркологическая клиника в Ростове-на-Дону уделяет внимание не только купированию острых проявлений, но и стабилизации соматических показателей. Такой подход снижает риски осложнений и формирует условия для дальнейших этапов терапии. Медицинская практика подтверждает, что отсутствие системности приводит к краткосрочному эффекту и рецидивам.
    Углубиться в тему – http://narkologicheskaya-klinika-v-rnd19.ru/narkologiya-rostov-kruglosutochno/https://narkologicheskaya-klinika-v-rnd19.ru

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

  6. Резкое прекращение употребления алкоголя часто сопровождается выраженными симптомами абстиненции: тремор, тахикардия, повышенное давление, беспокойство. В клинике «Северная Звезда» для детоксикации применяется инфузионная терапия с балансированными растворами, содержащими:
    Получить больше информации – https://lechenie-alkogolizma-arkhangelsk0.ru/anonimnoe-lechenie-alkogolizma-arkhangelsk

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

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

  9. Каждый курс лечения включает несколько этапов, направленных на постепенное улучшение состояния. Система выстроена так, чтобы обеспечить плавное восстановление функций организма без стресса. Ниже приведена таблица, показывающая основные этапы лечения и применяемые процедуры.
    Подробнее можно узнать тут – http://vyvod-iz-zapoya-v-rnd19.ru/vyvedenie-iz-zapoya-rostov-na-donu/

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

  11. Стационарный формат выбирают, когда цена ошибки слишком высока. Основная ценность стационара — круглосуточный контроль и возможность быстро корректировать лечение, если динамика ухудшается. Это особенно важно при длительном запое, тяжёлой абстиненции, нестабильном давлении, выраженной тахикардии, повторяющейся рвоте, обезвоживании, а также при подозрении на осложнения со стороны сердца и сосудов. Нередко стационар рекомендуют и тогда, когда пациент живёт один, нет возможности обеспечить наблюдение близких или ранее уже были «ночные провалы», когда состояние резко ухудшалось и приводило к повторному употреблению.
    Узнать больше – narkologicheskaya-klinika-pushkino12.ru/

  12. В этой информационной статье вы найдете интересное содержание, которое поможет вам расширить свои знания. Мы предлагаем увлекательный подход и уникальные взгляды на обсуждаемые темы, побуждая пользователей к активному мышлению и критическому анализу.
    Узнать из первых рук – https://justpets.tw/%E3%80%8C%E5%B7%B4%E5%93%A5%E7%8A%AC%E3%80%8D%E7%B8%BD%E6%98%AF%E8%A2%AB%E4%B8%BB%E4%BA%BA%E6%A3%84%E9%A4%8A%EF%BC%8C%E5%83%85%E5%9B%A0%E9%80%99%E4%BA%9B%E5%8E%9F%E5%9B%A0%EF%BC%8C%E5%BF%83%E7%96%BC

  13. Врачи клиники «КубаньТрезвость» применяют только безопасные, доказательно эффективные методы очищения организма. Каждый пациент получает персональную схему терапии, включающую капельницы, поддерживающие препараты и восстановительные процедуры. Детоксикация проводится под контролем нарколога, а дозировки медикаментов подбираются индивидуально.
    Подробнее – https://vyvod-iz-zapoya-v-krasnodare19.ru/krasnodar-vyvod-iz-zapoya-na-domu/

  14. Публикация предлагает читателю не просто информацию, а инструменты для анализа и саморазвития. Мы стимулируем критическое мышление, предлагая различные точки зрения и призывая к самостоятельному поиску решений.
    Получить дополнительную информацию – https://adsujsr.adsu.edu.ng/publications/28-ab-initio-study-of-structural-elastic-electronic-and-vibrational-properties-of-pbse-in-the-rock-salt-structure-corrected-latest-revised-version

  15. Резкое прекращение употребления алкоголя часто сопровождается выраженными симптомами абстиненции: тремор, тахикардия, повышенное давление, беспокойство. В клинике «Северная Звезда» для детоксикации применяется инфузионная терапия с балансированными растворами, содержащими:
    Детальнее – http://lechenie-alkogolizma-arkhangelsk0.ru/anonimnoe-lechenie-alkogolizma-arkhangelsk/

  16. Этот информативный текст отличается привлекательным содержанием и актуальными данными. Мы предлагаем читателям взглянуть на привычные вещи под новым углом, предоставляя интересный и доступный материал. Получите удовольствие от чтения и расширьте кругозор!
    Не пропусти важное – https://youtrading.com/ru/otchet-po-bezraboticze-usilil-impuls-na-fondovom-rynke

  17. В статье представлены ключевые моменты по актуальной теме, дополненные советами экспертов и ссылками на дополнительные ресурсы. Цель материала — дать читателю инструменты для самостоятельного развития и принятия осознанных решений.
    См. подробности – http://oldwordpress39.pkl.beep.pl/kontakt

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

  19. Эта информационная заметка предлагает лаконичное и четкое освещение актуальных вопросов. Здесь вы найдете ключевые факты и основную информацию по теме, которые помогут вам сформировать собственное мнение и повысить уровень осведомленности.
    Что ещё? Расскажи всё! – https://blog.ouriken.com/what-is-web-beacon-bug

  20. В данной статье вы найдете комплексный подход к изучению насущных тем. Мы комбинируем теоретические сведения с практическими советами, чтобы читатель мог не только понять проблему, но и найти пути её решения.
    Смотрите также… – http://ministries.ministerioshebron.com/index.php?option=com_k2&view=item&id=76:pr%C3%A9dicas-escogidas&lang=es&limitstart=267540

  21. В этом интересном тексте собраны обширные сведения, которые помогут вам понять различные аспекты обсуждаемой темы. Мы разбираем детали и факты, делая акцент на важности каждого элемента. Не упустите возможность расширить свои знания и взглянуть на мир по-новому!
    Проверенные методы — узнай сейчас – http://sochi.scapp.ru/scapp-krasota/za-krasotoj-svetit-luna

  22. В этом интересном тексте собраны обширные сведения, которые помогут вам понять различные аспекты обсуждаемой темы. Мы разбираем детали и факты, делая акцент на важности каждого элемента. Не упустите возможность расширить свои знания и взглянуть на мир по-новому!
    Что ещё? Расскажи всё! – https://template102.webekspor.com/5-main-destination-countries-for-indonesian-coffee-exports

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

  24. Лечебный процесс организуется таким образом, чтобы каждый этап логически дополнял предыдущий и формировал устойчивую динамику. Это позволяет избежать резких изменений состояния и поддерживать медицинскую безопасность.
    Получить дополнительные сведения – http://narkologicheskaya-klinika-v-rnd19.ru/chastnaya-narkologicheskaya-klinika-rostov-na-donu/

  25. В этой информационной статье вы найдете интересное содержание, которое поможет вам расширить свои знания. Мы предлагаем увлекательный подход и уникальные взгляды на обсуждаемые темы, побуждая пользователей к активному мышлению и критическому анализу.
    Расширить кругозор по теме – https://tyszkiewiczwadim.pl/moje-wazne-wydarzenia

  26. Этот обзор предлагает структурированное изложение информации по актуальным вопросам. Материал подан так, чтобы даже новичок мог быстро освоиться в теме и начать использовать полученные знания в практике.
    Желаете узнать подробности? – https://taiaea.org.tw/wp/archives/1330

  27. Этот информативный текст отличается привлекательным содержанием и актуальными данными. Мы предлагаем читателям взглянуть на привычные вещи под новым углом, предоставляя интересный и доступный материал. Получите удовольствие от чтения и расширьте кругозор!
    Полная информация здесь – https://www.avalab.org/2013/01/08/avastar-1-update-725/help_links_in_blender/comment-page-36420

  28. В этой публикации мы предлагаем подробные объяснения по актуальным вопросам, чтобы помочь читателям глубже понять их. Четкость и структурированность материала сделают его удобным для усвоения и применения в повседневной жизни.
    Более того — здесь – https://webofthings.org/2011/01/11/lifthackerspace-urbaniot

  29. Мы собрали для вас самые захватывающие факты из мира науки и истории. От малознакомых деталей до грандиозных событий — эта статья расширит ваш кругозор и подарит новое понимание того, как устроен наш мир.
    Что ещё? Расскажи всё! – http://k-kawasho.sakura.ne.jp/light/light.cgi

  30. Эта информационная статья содержит полезные факты, советы и рекомендации, которые помогут вам быть в курсе последних тенденций и изменений в выбранной области. Материал составлен так, чтобы быть полезным и понятным каждому.
    Практические советы ждут тебя – https://www.congrescnge.fr/2019/10/28/le-congres-vous-presente-ses-animations

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

  32. Эта статья погружает вас в увлекательный мир знаний, где каждый факт становится открытием. Мы расскажем о ключевых исторических поворотных моментах и научных прорывах, которые изменили ход цивилизации. Поймите, как прошлое формирует настоящее и как его уроки могут помочь нам строить будущее.
    Как это работает — подробно – https://en.teknopedia.teknokrat.ac.id/wiki/Category:Official_website_different_in_Wikidata_and_Wikipedia

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

  34. Врачи клиники используют современные методики, сочетающие медикаментозную терапию, психотерапию и физиологическое восстановление. Основное внимание уделяется не только физическому очищению организма, но и устранению причин, провоцирующих зависимость. Благодаря постоянному мониторингу жизненных показателей и корректировке схемы лечения удаётся избежать осложнений и обеспечить безопасное восстановление.
    Разобраться лучше – http://narkologicheskaya-klinika-v-krd19.ru/narkolog-krasnodar-anonimno/

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

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

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

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

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

  40. В клинике работают врачи-наркологи, психиатры, терапевты, психологи, реабилитологи. Вместо «универсальной» схемы каждому пациенту подбирают индивидуальный план, учитывая возраст, стаж употребления, состояние внутренних органов, психоэмоциональный фон, семейную ситуацию. Это особенно важно для жителей Долгопрудного, где многие совмещают работу в Москве с плотным графиком, и любая ошибка в лечении может дорого обойтись — потерей работоспособности, срывом деловых или личных планов.
    Исследовать вопрос подробнее – kodirovanie-ot-alkogolizma-na-domu-v-dolgoprudnom

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

发表回复

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