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隐藏得太深,总让人捉摸不定!>
thx
thx
thx
Каждый элемент программы направлен на создание комплексного подхода к лечению зависимости, обеспечивая помощь не только на физическом, но и на эмоциональном уровне. Индивидуальная программа реабилитации позволяет выстроить эффективную терапию, которая соответствует конкретным потребностям пациента.
Ознакомиться с деталями – реабилитация алкоголиков в москве
Осмотр на дому особенно важен в тех случаях, когда больному трудно вставать, пить воду, принимать пищу, спокойно лежать или ориентироваться в собственном состоянии. Чем тяжелее переносится выход из употребления, тем выше значение очной оценки, потому что по телефону невозможно полноценно определить границы безопасной помощи. При выраженных симптомах может потребоваться срочный выезд, чтобы вовремя оценить риски и определить, допустим ли вывод из запоя дома или необходимо наблюдение в стационаре.
Ознакомиться с деталями – нарколог на дом
thx
thx
Queen Win https://queenwincasinos.com/
Реабилитация алкоголиков в Москве требует интегрированного подхода, включающего не только медицинское лечение, но и психологическую помощь. Важно, чтобы реабилитационные центры предлагали программы, которые помогают пациентам не только избавиться от физической зависимости, но и наладить их психологическое состояние, а также восстановить их отношения с окружающими.
Получить дополнительные сведения – алкоголик реабилитация наркоманов в москве
casino https://w3seo.info/WSZScore/nolimitcity.uk.com/
casino https://audit.kostinlab.com/domain/pragmaticplay-demo.uk
casino https://ip2geolocation.com/?ip=pragmaticplay-demo.uk
thx
thx
What’s up, all is going fine here and ofcourse every one is sharing information, that’s in fact good, keep up writing.
John Hunter and the Aztec Treasure
thx
thx
thx
Hi there everyone, it’s my first visit at this web site, and piece of writing is actually fruitful in favor of me, keep up posting such posts.
Sugar Rush 1000
thx
Hi there, I want to subscribe for this blog to obtain latest updates, therefore where can i do it please help out.
Gates of Olympus Xmas 1000
We absolutely love your blog and find almost all of your post’s to be precisely what I’m looking for. Would you offer guest writers to write content available for you? I wouldn’t mind publishing a post or elaborating on a lot of the subjects you write regarding here. Again, awesome weblog!
Sugar Rush 1000
thx
Вывод из запоя на дому в Екатеринбурге – это услуга, которая становится необходимой, когда состояние пациента ухудшается после длительного употребления алкоголя, и медицинская помощь требуется немедленно. На дому пациенту предоставляется квалифицированная помощь, направленная на быстрое снятие интоксикации, восстановление водно-солевого баланса и стабилизацию общего состояния.
Подробнее можно узнать тут – вывод из запоя на дому анонимно
https://binarycloude.ru/category/skalping/ – binarycloude.ru
https://binarycloude.ru/category/akcii/ – binarycloude.ru
Если у пациента наблюдаются эти симптомы, важно своевременно обратиться к специалисту для назначения вывода из запоя на дому, что поможет предотвратить более серьезные осложнения и ускорить процесс восстановления, при этом можно заранее заказать помощь с учетом возраста пациента (в том числе после 40–50 лет), данных больного и особенностей его состояния.
Подробнее можно узнать тут – vyvod-iz-zapoya-na-domu-ekaterinburg-17.ru/
Решение о помещении пациента в стационар принимается на основе объективных медицинских критериев, а не только по желанию родственников. К показаниям относятся: запой длительностью более 72 часов, выраженная абстиненция с тахикардией, артериальной гипертензией, профузным потоотделением, наличие в анамнезе алкогольных делириев или судорожных эпизодов, сопутствующие хронические заболевания печени, сердца, поджелудочной железы. При отравление продуктами распада этанола, когда интоксикация затрагивает несколько систем одновременно, резкое прекращение употребления без медицинской поддержки может спровоцировать отек мозга, острую сердечную недостаточность или желудочно-кишечное кровотечение. При сочетанных расстройствах, когда в анамнезе присутствует наркомании, протоколы адаптируются под специфику психоактивных соединений и включают усиленный нейрологический контроль. Стационар позволяет провести полноценную диагностику, включая ЭКГ, экспресс-анализы крови и мониторинг сатурации, что формирует точную картину состояния и исключает шаблонные назначения.
Получить больше информации – вывод из запоя в стационаре санкт-петербург
Помощь на дому рассматривают при состояниях, которые сопровождаются заметным ухудшением самочувствия после алкоголя. Обычно это несколько дней запоя, тяжелое похмелье, дрожь в руках, бессонница, выраженная слабость, раздражительность, тревога, тошнота, сухость во рту, отсутствие аппетита и признаки обезвоживания. В таких случаях осмотр врача нужен для оценки тяжести состояния и определения безопасной тактики.
Получить дополнительные сведения – вызвать нарколога на дом в москве
Решение о помещении пациента в стационар принимается на основе объективных медицинских критериев, а не только по желанию родственников. К показаниям относятся: запой длительностью более 72 часов, выраженная абстиненция с тахикардией, артериальной гипертензией, профузным потоотделением, наличие в анамнезе алкогольных делириев или судорожных эпизодов, сопутствующие хронические заболевания печени, сердца, поджелудочной железы. При отравление продуктами распада этанола, когда интоксикация затрагивает несколько систем одновременно, резкое прекращение употребления без медицинской поддержки может спровоцировать отек мозга, острую сердечную недостаточность или желудочно-кишечное кровотечение. При сочетанных расстройствах, когда в анамнезе присутствует наркомании, протоколы адаптируются под специфику психоактивных соединений и включают усиленный нейрологический контроль. Стационар позволяет провести полноценную диагностику, включая ЭКГ, экспресс-анализы крови и мониторинг сатурации, что формирует точную картину состояния и исключает шаблонные назначения.
Ознакомиться с деталями – вывод из запоя в стационаре клиника в санкт-петербурге
Вывод из запоя на дому требуется в тех случаях, когда человек сталкивается с длительным непрерывным употреблением алкоголя, которое приводит к тяжелым последствиям для организма. Это состояние опасно не только для здоровья, но и для жизни, поэтому быстрое вмешательство специалистов необходимо, при этом можно заказать наркологическая помощь. Врач на дому помогает пациенту выйти из запоя безопасно, минимизируя риски для его здоровья, что является особенно важно для больного, включая случаи наркомании, а также с учетом его данных, возраста (в том числе после 40–50 лет) и актуальной цена лечения для тех, кто не хочет или не может пройти лечение в стационаре.
Разобраться лучше – вывод из запоя на дому анонимно
Вывод из запоя на дому с медицинским контролем — это услуга, которая позволяет пациентам избавиться от алкогольной зависимости в комфортных условиях своего дома. В Екатеринбурге эта услуга становится все более востребованной, поскольку она предоставляет безопасный и эффективный способ вывода человека из запоя, при этом не требуя госпитализации. Процедура сопровождается контролем квалифицированных специалистов, что минимизирует риски и ускоряет процесс восстановления.
Исследовать вопрос подробнее – вывод из запоя на дому круглосуточно екатеринбург
Домашний формат помощи рассматривают тогда, когда человеку тяжело добраться до медицинского учреждения, состояние ухудшается после нескольких дней употребления спиртного или родственникам требуется очная оценка без промедления. После осмотра становится ясно, допустима ли помощь на дому, требуется ли капельница, можно ли ограничиться наблюдением в домашних условиях или нужен другой маршрут помощи. Вопрос о том, как вызвать специалиста, нередко возникает в ситуациях, когда состояние нарастает быстро и требуется решение без откладывания. Если подобные эпизоды повторяются, дальнейшее обсуждение может касаться не только текущего состояния, но и лечения алкоголизма, работы с зависимостью и более длительной программы восстановления.
Получить больше информации – нарколог на дом анонимно в москве
Нарколог на дом в Екатеринбурге — это формат помощи, который рассматривают в тех случаях, когда после употребления алкоголя больному требуется врачебный осмотр без поездки в клинику. Обычно речь идет о запое, выраженном похмельном синдроме, обезвоживании, слабости, треморе, тревоге, бессоннице, скачках давления, сердцебиении и общем ухудшении самочувствия. В такой ситуации состояние оценивают на месте и определяют, допустима ли помощь дома или нужен другой объем наблюдения.
Разобраться лучше – https://narkolog-na-dom-ekaterinburg-3.ru/
Нарколог на дом в Екатеринбурге: выезд врача на дом, лечение запоя и консультации в наркологической клинике «НЕО+».
Ознакомиться с деталями – вызвать нарколога на дом екатеринбург
Первый этап вывода из запоя на дому – это первичная оценка состояния пациента. Врач, прибывший на вызов, осматривает пациента, проверяет уровень алкоголя в крови, измеряет артериальное давление, пульс и температуру. Это необходимо для того, чтобы определить степень алкогольной интоксикации и выбрать правильную тактику лечения.
Подробнее можно узнать тут – анонимный вывод из запоя на дому в екатеринбурге
Нарколог на дом в Москве — это формат помощи, который рассматривают в тех случаях, когда после употребления алкоголя больному требуется врачебный осмотр без поездки в клинику. Чаще всего обращение связано с запоем, выраженным похмельным синдромом, нарушением сна, слабостью, тремором, тревогой, обезвоживанием, сердцебиением, скачками давления и общим ухудшением самочувствия. Дальнейшая тактика зависит от состояния больного на момент осмотра, длительности употребления алкоголя, возраста и сопутствующих заболеваний.
Ознакомиться с деталями – https://narkolog-na-dom-moskva-20.ru
Hi, I want to subscribe for this web site to obtain most up-to-date updates, so where can i do it please assist.
free spins no deposit
thx
thx
Поводом для обращения обычно становятся слабость, тремор, тревога, бессонница, учащенный пульс, нестабильное давление, тошнота и ощущение физического истощения. Эти проявления часто усиливаются после прекращения употребления алкоголя или на фоне затянувшегося запоя.
Получить дополнительную информацию – нарколог на дом
It’s amazing to visit this website and reading the views of all friends regarding this article, while I am also eager of getting experience.
Starburst
I get pleasure from, result in I found just what I used to be looking for. You have ended my four day long hunt! God Bless you man. Have a great day. Bye
no deposit bonus
кабель цена за метр https://kabel-cena-za-metr-1.ru
светотехника https://svetotekhnika-1.ru
Непрерывный мониторинг витальных показателей — ключевое отличие стационарного формата. В палатах клиники «Элегия Мед» установлены системы отслеживания частоты пульса, сатурации, температуры и артериального давления, данные с которых автоматически передаются в электронную медицинскую карту. Медицинский персонал дежурит круглосуточно, что обеспечивает мгновенную реакцию на ухудшение состояния: коррекцию инфузионной терапии, введение симптоматических препаратов, привлечение смежных специалистов при необходимости. Такая организация процесса исключает хаотичное назначение средств, предотвращает полипрагмазию и гарантирует, что каждый этап детоксикации проходит под строгим клиническим контролем. Контроль состояния пациента в режиме реального времени позволяет врачам оперативно корректировать терапию и минимизировать риски для здоровья.
Получить дополнительные сведения – вывод из запоя в стационаре
кабель цена за метр
Wow that was strange. I just wrote an very long comment but after I clicked submit my comment didn’t show up. Grrrr… well I’m not writing all that over again. Anyways, just wanted to say great blog!
Sweet Bonanza
светотехника
Meritking Giris Turkiye