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隐藏得太深,总让人捉摸不定!>
Специалисты регулярно помогают при интоксикации, запоях, абстиненции и сложных состояниях зависимости.
Получить больше информации – помощь вывод из запоя Екатеринбург
Медицинская публикация представляет собой свод актуальных исследований, экспертных мнений и новейших достижений в сфере здравоохранения. Здесь вы найдете информацию о новых методах лечения, прорывных технологиях и их практическом применении. Мы стремимся сделать актуальные медицинские исследования доступными и понятными для широкой аудитории.
Не упусти важное! – вызвать капельницу от запоя
При судорогах, потере сознания, тяжелой одышке, подозрении на инфаркт или инсульт требуется скорая помощь. Белая горячка также не является ситуацией для обычной домашней капельницы. При необходимости пациента направляют непосредственно в стационар, а не в обычный вытрезвитель. Немедленного обращения требуют и тяжелые нарушения сознания, поскольку задержка может повысить риск осложнений. Если состояние стабильно, врач может провести лечение по месту вызова и контролировать самочувствие в первые часы.
Изучить вопрос подробнее – вывод из запоя капельница на дому в Екатеринбурге
Резкое прекращение приема спиртного у зависимого с большим стажем способно вызвать тяжелую реакцию нервной системы. Состояние отмены начинается через определенный период трезвости и может сопровождаться выраженной тревожностью, бессонницей, дрожью и нарушениями поведения. Врачебной практикой предусмотрена оценка риска до начала активного лечения.
Получить больше информации – vyvod-iz-zapoya-na-domu-oblast
Эта публикация обращает внимание на важность профилактики зависимостей. Мы обсудим, как осведомленность и образование могут помочь в предотвращении возникновения зависимости. Читатели смогут ознакомиться с полезными советами и ресурсами, которые способствуют здоровому образу жизни.
Узнать из первых рук – вызвать нарколога на дом срочно
В этой статье мы подробно рассматриваем проверенные методы борьбы с зависимостями, включая психотерапию, медикаментозное лечение и поддержку со стороны общества. Мы акцентируем внимание на важности комплексного подхода и возможности успешного восстановления для людей, столкнувшихся с этой проблемой.
Где можно узнать подробнее? – безопасный вывод из запоя на дому
Вывод из запоя в Екатеринбурге проводят анонимно на дому или в стационаре наркологической клиники. Оценивают абстиненцию, почки, печень и сердечно-сосудистую систему. Если после спиртного резко ухудшается состояние, появилась белая горячка, сильная тревожность, скачки давления или спутанность сознания, необходимо обращаться за экстренной помощью. Нарколог определяет способ выведения алкоголя, необходимые процедуры и курс лечения; самостоятельно употреблять седативные медикаменты, снотворные или делать укол без схемы лечения нельзя. Инфузионное лечение, снятие похмелья, очищение от продуктов распада алкоголя и восполнение жидкости проводятся с учетом тяжести интоксикации.
Изучить вопрос подробнее – https://vyvod-iz-zapoya-v-ekaterinburge23.ru
Эта статья освещает различные аспекты освобождения от зависимости и пути к выздоровлению. Мы обсуждаем важность осознания своей проблемы и обращения за помощью. Читатели получат практические советы о том, как преодолевать трудности и строить новую жизнь без зависимости.
Почему это важно? – клиника наркологическая москва
Состояние пациента отслеживается на каждом этапе, от первичной консультации до дальнейших рекомендаций.
Ознакомиться с деталями – раствор для вывода из запоя
Схема помощи зависит от состояния, стажа употребления, противопоказаний и дальнейших целей лечения.
Изучить вопрос подробнее – вывод из запоя москва срочно
В этой медицинской статье мы погрузимся в актуальные вопросы здравоохранения и лечения заболеваний. Читатели узнают о современных подходах, методах диагностики и новых открытий в научных исследованиях. Наша цель — донести важную информацию и повысить уровень осведомленности о здоровье.
Следуйте по ссылке – платный нарколог на дом
Этот информационный материал подробно освещает проблему наркозависимости, ее причины и последствия. Мы предлагаем информацию о методах лечения, профилактики и поддерживающих программах. Цель статьи — повысить осведомленность и продвигать идеи о необходимости борьбы с зависимостями.
Ознакомьтесь поближе – платная наркологическая помощь
Лечение алкоголизма не заканчивается детоксикацией. После вывода из запоя важно продолжить лечение алкогольной зависимости: пройти обследование, обсудить кодирование, психотерапию и реабилитацию. Такая программа помогает не просто пережить запой, а восстановить здоровье и научиться жить без алкоголя.
Ознакомиться с деталями – https://vyvod-iz-zapoya-v-ekaterinburge26.ru/
В этой статье мы рассматриваем разрушительное влияние зависимости на жизнь человека. Обсуждаются аспекты, такие как здоровье, отношения и профессиональные достижения. Читатели узнают о необходимости обращения за помощью и о путях к восстановлению.
Более того — здесь – довженко кодировка от алкоголизма цена
В этой статье мы обсудим процесс восстановления после зависимостей, акцентируя внимание на различных методах и подходах к реабилитации. Читатели узнают, как создать план выздоровления и использовать полезные ресурсы для достижения устойчивых изменений.
Получить дополнительную информацию – наркологический центр нижний новгород
Мы рассмотрим современные вызовы здравоохранения и пути их решения с помощью технологий и научных исследований. В статье собраны данные о новых лекарствах, методах диагностики и системном подходе к улучшению здоровья населения.
Открыть полностью – частная наркологическая клиника в москве адреса
В этом исследовании рассмотрены методы лечения зависимостей и их эффективность. Мы проанализируем различные подходы, используемые в реабилитационных центрах, и представим данные о результативности программ. Читатели получат надежные и научно обоснованные сведения о данной проблеме.
Изучить вопрос глубже – частная наркологическая клиника в москве адреса
В статье по вопросам здоровья мы рассматриваем актуальные проблемы, с которыми сталкивается общество. Обсуждаются заболевания, факторы риска и важные аспекты профилактики. Читатели получат полезные советы о том, как сохранить здоровье и улучшить качество жизни.
Связаться за уточнением – лечение алкогольной зависимости в нижнем новгороде
В этой статье мы подробно рассматриваем проверенные методы борьбы с зависимостями, включая психотерапию, медикаментозное лечение и поддержку со стороны общества. Мы акцентируем внимание на важности комплексного подхода и возможности успешного восстановления для людей, столкнувшихся с этой проблемой.
Узнать напрямую – выведение из запоя в нижнем новгороде
Чтобы записаться на выезд, достаточно оставить заявку и сообщить адрес. Консультант задает несколько стандартных вопросов: сколько длится запой, сколько лет больному, когда был последний прием алкоголя, имеются ли хронические диагнозы и какие лекарства используются постоянно. Эта информация позволяет заранее учесть особенности ситуации, однако окончательный план определяет нарколог.
Получить больше информации – врач вывод из запоя
Мы рассмотрим современные вызовы здравоохранения и пути их решения с помощью технологий и научных исследований. В статье собраны данные о новых лекарствах, методах диагностики и системном подходе к улучшению здоровья населения.
Практические советы ждут тебя – зависимость 24
Наркологическая клиника в Красноярске предлагает комплексное лечение алкогольной и наркотической зависимости, выведение из запоя, детоксикацию, консультацию нарколога, психотерапевтическую поддержку и реабилитацию. Красноярский наркологический центр принимает взрослых лиц, столкнувшихся с алкоголизмом, наркоманией, токсикоманией, никотиновой, компьютерной, игровой или иной формой аддиктивного расстройства. Лечение подбирается с учетом возраста пациента, стажа употребления, физического и психического статуса, результатов осмотра врача и задач дальнейшей реабилитации. Подробнее подход обсуждается индивидуально: универсальной процедуры, одинаково подходящей каждому зависимому, не существует.
Получить больше информации – https://nnarkologicheskaya-klinika-v-krasnoyarske17.ru/
Специалисты регулярно помогают при интоксикации, запоях, абстиненции и сложных состояниях зависимости.
Узнать больше – вывод наркологическая клиника в Санкт-Петербурге
Помощь врача нужна, если запой длится несколько дней, больному становится сложно самостоятельно отказаться от алкоголя, а попытки выйти из запоя сопровождаются выраженным похмельем. Чем дольше сохраняется запой, тем выше нагрузка на организм пациента. При алкоголизме нередко обостряются хронические заболевания, возникают нарушения сердечного ритма, сна, пищеварения, деятельности печени и нервной системы. В таком случае лечение лучше проводить под контролем нарколога.
Ознакомиться с деталями – вывод из запоя Санкт-Петербург
Эта публикация исследует взаимосвязь зависимости и психологии. Мы обсудим, как психологические аспекты влияют на появление зависимостей и процесс выздоровления. Читатели смогут понять важность профессиональной поддержки и применения научных подходов в терапии.
Неизвестные факты о… – вывожу из запоя екатеринбург
Запой сопровождается регулярным приемом спиртного в течение нескольких дней или недель. Человек пьет повторно, чтобы снизить неприятные ощущения похмелья, однако такое поведение усиливает интоксикацию и поддерживает алкогольную зависимость. Лечение запоя помогает безопаснее пройти период отказа от алкоголя и снизить вероятность опасных осложнений.
Ознакомиться с деталями – вывод из запоя на дому цена Санкт-Петербург
Такие состояния могут стремительно развиться и привести к смерти. Если возникла угроза жизни, следует обеспечить покой, вызвать врачей и не экспериментировать с самолечением. Медики при необходимости организуют перевод в больницу.
Изучить вопрос подробнее – вывод из запоя с выездом
Схема помощи зависит от состояния, стажа употребления, противопоказаний и дальнейших целей лечения.
Дополнительная информация – вывод из запоя москва и область
Нарколог на дому оценивает человека комплексно. Даже если родственники считают, что нужна только капельница, специалист сначала должен исключить противопоказания и опасные осложнения. Чем дольше продолжается употребление, тем важнее своевременно получить медицинскую помощь.
Изучить вопрос подробнее – вызов нарколога на дом в Екатеринбурге
С пациентом работают профильные специалисты, которые оценивают состояние и подбирают безопасный план помощи.
Подробнее – https://1.vyvod-iz-zapoya-moskva1-13.ru/
Специалисты регулярно помогают при интоксикации, запоях, абстиненции и сложных состояниях зависимости.
Получить больше информации – https://1.vyvod-iz-zapoya-balashiha13.ru/
Эта публикация исследует взаимосвязь зависимости и психологии. Мы обсудим, как психологические аспекты влияют на появление зависимостей и процесс выздоровления. Читатели смогут понять важность профессиональной поддержки и применения научных подходов в терапии.
Ознакомьтесь с аналитикой – врач нарколог на дом платный
В данной статье мы акцентируем внимание на важности поддержки в процессе выздоровления. Мы обсудим, как друзья, семья и профессионалы могут помочь тем, кто сталкивается с зависимостями. Читатели получат практические советы, как поддерживать близких на пути к новой жизни.
Всё, что нужно знать – цена выведения из запоя на дому
Общаемся без осуждения и давления, сохраняя спокойную атмосферу для пациента и семьи.
Узнать больше – запой нарколог на дом
Лечение наркомании строится с учетом вида вещества, частоты приема и общего здоровья. При употреблении опиоидов, стимуляторов, кокаина и других наркотиков клиника может провести детоксикационную терапию и снятие ломки. Лечение наркомании в стационаре дает возможность контролировать пациентов круглосуточно, что особенно важно в первые дни отказа от наркотиков.
Изучить вопрос подробнее – анонимная наркологическая клиника
casino https://seoanalizer.kseo.com.br/domain/win-beastcasino.com
Принимаем заявки круглосуточно, уточняем состояние и подбираем безопасный формат помощи.
Узнать больше – https://1.vyvod-iz-zapoya-moskva1-13.ru/
Общаемся без осуждения и давления, сохраняя спокойную атмосферу для пациента и семьи.
Изучить вопрос подробнее – https://5.vyvod-iz-zapoya-balashiha13.ru/
При тяжелой интоксикации зависимого отправляют в стационар. В клинику он может приехать самостоятельно либо воспользоваться сопровождением, если такая услуга предусмотрена. При поступлении доктор проводит осмотр, после чего пациент отправляется в палату. Подробнее лечение зависит от результатов обследования. Когда состояние стабилизируется, решается вопрос о дальнейшем лечении зависимости и реабилитации.
Узнать больше – наркологическая клиника нарколог в Красноярске
Домашний вызов подходит не во всех случаях. При судорогах, психозе, белой горячке, потере сознания, нарушении дыхания, подозрении на инфаркт, инсульт или передозировку наркотиков требуется экстренное вмешательство и госпитализация. Поэтому задача врача заключается не только в том, чтобы быстро облегчить состояние, но и своевременно определить, можно ли продолжить лечение дома или больному безопаснее находиться в стационаре.
Ознакомиться с деталями – http://narcolog-na-dom-ekaterinburg15.ru/
Схема помощи зависит от состояния, стажа употребления, противопоказаний и дальнейших целей лечения.
Получить больше информации – врач вывод из запоя
Общаемся без осуждения и давления, сохраняя спокойную атмосферу для пациента и семьи.
Получить больше информации – 2vyvod-iz-zapoya-podolsk77.ru/