上周在XP系统上测试一个驱动的时候,发现驱动加载不上,“net start”命令只是给出一个无意义的错误代码,驱动的DriverEntry()入口程序还没有得到机会运行。
初步怀疑是引入函数的问题,用WDK工具Depends.exe查看了一下驱动文件,果然是由于_chkstk函数无法解析所导致。
_chkstk是个微软C编译器的辅助库函数,MSDN上对其介绍十分简略:
_chkstk Routine is a helper routine for the C compiler. For x86 compilers, _chkstk Routine is called when the local variables exceed 4096 bytes; for x64 compilers it is 8K.
当编译器察觉到局部变量太大超过限值时(X86系统限值是4K,X64t系统上是8K), 编译器会自动插入_chkstk这个函数以保证栈空间所使用页面在内存中。
问题是发现了,但要查出来究竟在哪个函数中还是要费些心思的。从用户层移植过来不少代码,基本锁定问题出在其中,但如果一个函数一个函数寻找实在是个不讨巧的笨办法,也不符合程序人的一贯风格,便用IDA反编译驱动sys文件,于汇编代码中搜索_chkstk字串,直接锁定出了问题函数。此函数所使用的一个结构体中定义了超大数组,对栈的超常使用在内核中是相当危险的。
解决办法很简单,直接将此结构的定义放在一个从内存分配的结构中即可。问题虽已解决,但对于DDK中有关_chkstk的描述,及其相关的疑问一直让我觉得困扰,比如,为什么X86上是4K,而AMD64架构上可以是8K。
这两天终于有了时间,可以彻底地了结这个疑问了。
要想解决这个问题,还要先从用户栈的分配开始。以ReactOS代码为例,当线程创建时,CreateThread()会调用BasepCreateStack()来创建用户栈,具体可以参见ReactOS源码:
~/ReactOS/lib/kernel32/misc/utils.c。
BasepCreateStack()函数主要做三件事:
- 1,分配栈空间所需的虚拟内存,大小为Stack Reserve Size
- 2,根据Stack Commit Size锁定内存页面,如果Stack Commit Size小于Stack Reserve Size的话,需要增加一个Page,这个额外申请的Page用作Guard Page之用。
- 3,将栈底部的Page设定为Guard Page。
当用户栈被用尽时,会访问到栈底部的Guard Page。而对Guard Page的任何访问都会导致Page Fault的发生。Page Fault处理函数MmAccessFault()可以分析出此次Page Fault是由Guard Page导致,便会默认由用户栈处理程序MiCheckForUserStackOverflow()来处理。如果用户栈并没有溢出的话,即Stack Commit Size小于Stack Reserve Size的情况,MiCheckForUserStackOverflow()会自动向下扩展栈空间,扩展大小为GUARD_PAGE_SIZE。 GUARD_PAGE_SIZE针对不同的CPU架构有不同的定义:
X64: #define GUARD_PAGE_SIZE (PAGE_SIZE * 2)
X86: #define GUARD_PAGE_SIZE PAGE_SIZE
这里便解释了为什么X86系统上的限制是4K(即PAGE_SIZE),而X64上却为8K的原因。
说到此处,该是解答_chkstk()倒底是干什么的时候了。Visual Studio中有_chkstk的源码,以x86为例:
输入参数eax是所需堆栈大小(字节)
labelP _chkstk, PUBLIC
push ecx ; save ecx
cmp eax,_PAGESIZE_ ; more than one page requested?
lea ecx,[esp] + 8 ; compute new stack pointer in ecx
; correct for return address and
; saved ecx
jb short lastpage ; no
;------------
probepages:
sub ecx,_PAGESIZE_ ; yes, move down a page
sub eax,_PAGESIZE_ ; adjust request and...
test dword ptr [ecx],eax ; ...probe it (如果是guard page,刚会导致page fault,最终用户栈
; 将向下扩展一个页面)
cmp eax,_PAGESIZE_ ; more than one page requested?
jae short probepages ; no
lastpage:
sub ecx,eax ; move stack down by eax
mov eax,esp ; save current tos and do a...
test dword ptr [ecx],eax ; ...probe in case a page was crossed
; 调用函数将要访问的堆栈底部 ,如果此页面为guard page,同
; 样会导致用户栈的向下延伸
mov esp,ecx ; set the new stack pointer
; 向下更改栈指针,其上直到原ESP的栈空间为调用函数局部变量
mov ecx,dword ptr [eax] ; recover ecx
mov eax,dword ptr [eax + 4] ; recover return address
; 将返回地址(调用函数中)放入eax
push eax ; prepare return address
; 将返回地址(调用函数中)放入当前栈中,准备返回
; ...probe in case a page was crossed
ret
end
_chkstk()的主要作用是保证栈向下连续的生长。如果没有_chkstk(),当局部变量太多并超过guard page下沿时,若再有压栈操作,将会导致Access violation错误。因为此时堆栈内存页面无效,压栈直接将导致page fault的发生,而page fault处理程序因不能识别此fault的发生原因从而不能做出正确判断和有效处理。
相对用户层,内核程序的处理则相当简单,就如Win7内核中_chkstk实际上就是个空函数。其原因就是内核线程的栈空间是固定的。其取值针对X86及X64架构亦有所不同:
X64: #define KERNEL_STACK_SIZE 0x6000 /* 6个内存页面 */
X86: #define KERNEL_STACK_SIZE 12288 /* 3个内存页面 */
内核中栈资源非常紧缺,并驱动程序的编写有较高的要求,特别是有递归的情况下,一定要注意嵌套的层数,否则很容易收到M$发来的蓝屏。
Windows内核中其实还有一种大堆栈机制,以确保一些对堆栈较高消耗的特殊情况能够得到满足,但这部分完全是黑箱,对用户不可见,不是常见情况,此处不再多述。
参考资料:
1, http://support.microsoft.com/kb/100775/en
2, http://msdn.microsoft.com/en-us/library/ms648426(v=vs.85).aspx
3, http://www.reactos.org ReactOS源码
mostbet adresă oficială http://www.mostbet57648.help
mostbet hivatalos app mostbet2025.help
Вывод из запоя в стационаре в Нижнем Новгороде с круглосуточным наблюдением и поэтапным восстановлением в наркологической клинике «Частный медик 24»
Ознакомиться с деталями – вывод из запоя клиника в нижнем новгороде
mostbet sign in https://mostbet2020.help/
Выезд нарколога начинается с осмотра пациента. Доктора измеряют давление, пульс, оценивают уровень сознания и выраженность симптомов. На основании этих данных формируется план лечения, который реализуется сразу на месте. Такой подход позволяет быстро перейти к стабилизации состояния без лишних этапов.
Узнать больше – нарколог на дом вывод из запоя
Суть капельницы заключается в том, чтобы быстро ввести в организм необходимые растворы, которые помогают восстановить водно-солевой баланс, очищают организм от токсинов, ускоряют обмен веществ и снижают нагрузку на внутренние органы. Врачи-наркологи используют специальные составы, которые включают в себя жидкости, электролиты, витамины и лекарственные средства для снятия симптомов похмелья.
Узнать больше – капельница от похмелья
Работа с пациентами в наркологическом стационаре начинается с диагностики, которая помогает определить степень зависимости и сопутствующие заболевания. На основе этих данных разрабатывается индивидуальный план лечения. Врачи, наркологи и психотерапевты работают в тесном контакте с пациентом, что позволяет достичь наилучших результатов в процессе восстановления. Важно также убедиться, что клиника имеет необходимую лицензию, а для эффективного лечения могут быть предложены такие процедуры, как прием психотерапевта и кодирование от зависимости.
Подробнее тут – наркологический стационар санкт-петербург
Нарколог на дом в Самаре с выездом специалиста, детоксикацией и анонимной медицинской помощью в наркологической клинике «Частный медик 24»
Подробнее тут – http://narkolog-na-dom-samara-1.ru
Капельница от похмелья нужна не только в случаях тяжёлой интоксикации, но и при более лёгких симптомах, когда пациент ощущает себя уставшим и измотанным, но не может справиться с проблемами самостоятельно. Некоторые из симптомов, при которых капельница может быть особенно полезна, включают:
Детальнее – https://kapelnicza-ot-pokhmelya-ekaterinburg-5.ru
Основной задачей капельницы от запоя является быстрое устранение симптомов интоксикации, связанных с длительным употреблением алкоголя. Введение в вену специальных растворов помогает не только вывести алкогольные токсины, но и восстановить нормальное функционирование внутренних органов, пострадавших от воздействия алкоголя. Подбор состава капельницы всегда индивидуален и зависит от состояния пациента, а также может включать дополнительные методы лечения, такие как кодирование от алкоголизма.
Изучить вопрос глубже – капельница от запоя
Комплексное лечение в наркологическом стационаре включает несколько последовательных этапов, каждый из которых направлен на решение конкретных задач. Начальный этап включает в себя медицинское вмешательство, направленное на устранение токсинов из организма, и стабилизацию общего состояния пациента. Далее начинается реабилитация, которая помогает закрепить достигнутые результаты и восстановить психоэмоциональное состояние пациента. Для выбора подходящего стационара стоит ознакомиться с отзывами и дополнительной информацией о клинике, а также уточнить, в каком районе города она расположена.
Подробнее – https://narkologicheskij-staczionar-sankt-peterburg-1.ru/
continuously i used to read smaller articles that as well clear their motive, and that is also happening with this post which I am reading at this time.
mostbet bejelentkezés google fiókkal mostbet2025.help
mostbet usdt trc20 https://mostbet2020.help/
mostbet creare cont pe mobil mostbet57648.help
melbet способы оплаты киргизия melbet способы оплаты киргизия
Для Воронежа выездной формат особенно востребован вечером, ночью и ранним утром, когда у больного резко усиливаются симптомы и поездка в медицинское учреждение становится тяжёлой или просто нереальной. Если человек несколько дней употреблял алкоголь, почти не спал, плохо переносит воду, жалуется на сердцебиение и слабость, то откладывать осмотр не стоит. Срочная наркологическая помощь нужна именно тогда, когда ситуация развивается быстро, а семья уже видит, что своими силами справиться не удаётся. Врач приезжает, проводит осмотр, определяет, нет ли признаков осложнений, и уже на месте решает, какие меры допустимы дома, а какие требуют другого формата оказания помощи.
Подробнее тут – врач нарколог на дом
mostbet magyar beállítás mostbet magyar beállítás
mostbet turniej slotów mostbet turniej slotów
crash mostbet mobil https://mostbet2020.help/
При таких условиях стационар позволяет контролировать состояние в режиме 24/7 и при необходимости быстро корректировать лечение. Это снижает риски и делает процесс более предсказуемым. При этом услуга может предоставляться анонимно, а цену лечения можно уточнить по телефону или при обращении в центр лечения алкоголизма и наркомании.
Подробнее – вывод из запоя
Выбор наркологического стационара с комфортными условиями требует внимательного подхода, чтобы убедиться, что все аспекты лечения и реабилитации будут выполнены на высоком уровне. Важно учитывать не только медицинскую составляющую, но и то, как созданы условия для пациентов, их психологический комфорт и безопасность на всех этапах лечения. Также стоит учитывать цену за стационарное лечение с круглосуточным наблюдением, чтобы выбрать оптимальный вариант, соответствующий потребностям пациента и его бюджету.
Исследовать вопрос подробнее – лечение в наркологическом стационаре
Запрос на выезд врача связан не только с классическим запоем. На практике домашняя помощь нужна в разных ситуациях, когда организму уже трудно компенсировать последствия употребления, а откладывание визита увеличивает риск осложнений.
Получить больше информации – вызвать нарколога на дом в воронеже
В Нижнем Новгороде услуга выезда нарколога чаще всего используется при состояниях, когда пациент физически не может посетить клинику или требуется срочное медицинское вмешательство. Врач приезжает с необходимыми препаратами и оборудованием, проводит осмотр и сразу приступает к лечению. Такой формат особенно важен при выраженной интоксикации и нестабильном состоянии.
Узнать больше – вызвать нарколога на дом нижний новгород
мостбет краш на деньги мостбет краш на деньги
Комплексное лечение в наркологическом стационаре включает несколько последовательных этапов, каждый из которых направлен на решение конкретных задач. Начальный этап включает в себя медицинское вмешательство, направленное на устранение токсинов из организма, и стабилизацию общего состояния пациента. Далее начинается реабилитация, которая помогает закрепить достигнутые результаты и восстановить психоэмоциональное состояние пациента. Для выбора подходящего стационара стоит ознакомиться с отзывами и дополнительной информацией о клинике, а также уточнить, в каком районе города она расположена.
Углубиться в тему – наркологический стационар в санкт-петербурге
При первой консультации нарколог осматривает пациента, чтобы оценить его состояние и подобрать оптимальную схему лечения. В зависимости от тяжести похмелья, врач может назначить инфузию с регидратационными растворами, витаминами группы B и другими препаратами, которые способствуют восстановлению. Важно, что капельница не только помогает снять симптомы, но и устраняет причины токсического воздействия алкоголя на организм, предотвращая развитие осложнений.
Подробнее тут – капельница от похмелья на дому самара
Капельница от похмелья нужна не только в случаях тяжёлой интоксикации, но и при более лёгких симптомах, когда пациент ощущает себя уставшим и измотанным, но не может справиться с проблемами самостоятельно. Некоторые из симптомов, при которых капельница может быть особенно полезна, включают:
Подробнее можно узнать тут – капельница от похмелья цена в екатеринбурге
К основным показаниям относятся:
Получить дополнительные сведения – вывод из запоя капельница нижний новгород
мелбет куда вводить промокод https://www.melbet16740.help
Такой подход позволяет начать лечение без задержек и снизить риски, связанные с транспортировкой пациента. При этом помощь может предоставляться анонимно, что важно для многих пациентов.
Изучить вопрос глубже – анонимный вывод из запоя на дому
mostbet limit dzienny wypłaty http://www.mostbet2001.help
mostbet descărcare ios https://mostbet57648.help/
Выезд нарколога начинается с осмотра пациента. Доктора измеряют давление, пульс, оценивают уровень сознания и выраженность симптомов. На основании этих данных формируется план лечения, который реализуется сразу на месте. Такой подход позволяет быстро перейти к стабилизации состояния без лишних этапов.
Узнать больше – вывод из запоя на дому санкт-петербург
Выезд врача начинается с оценки состояния пациента. Доктора измеряют давление, пульс, оценивают уровень сознания и выраженность симптомов. После этого формируется план лечения, который реализуется сразу. Такой подход позволяет быстро перейти к стабилизации состояния человека.
Узнать больше – нарколог на дом вывод из запоя
mostbet jackpotos nyerőgépek http://mostbet2025.help/
mostbet blackjack online http://www.mostbet2020.help
Капельница от похмелья — это не просто средство для снятия симптомов, но и эффективный способ быстрого восстановления организма после алкогольной интоксикации. В наркологической клинике «Частный медик 24» в Екатеринбурге мы предоставляем услугу выезда нарколога на дом, что позволяет пациентам получить необходимую медицинскую помощь, не покидая комфорт своей обстановки. Это особенно важно в случае, если состояние пациента серьёзно ухудшилось, и он не может поехать в клинику самостоятельно.
Разобраться лучше – капельница от похмелья на дом в екатеринбурге
мелбет скачать последнюю версию мелбет скачать последнюю версию
mostbet autoryzacja logowania mostbet autoryzacja logowania
mostbet вывод средств mostbet вывод средств
Нарколог на дом в Самаре с выездом специалиста, детоксикацией и анонимной медицинской помощью в наркологической клинике «Частный медик 24»
Изучить вопрос глубже – http://narkolog-na-dom-samara-1.ru
При выборе наркологического стационара с комфортными условиями в Санкт-Петербурге важно учитывать несколько ключевых факторов, которые могут повлиять на успех лечения. Кроме высококвалифицированных специалистов и индивидуального подхода, комфортные условия для проживания играют важную роль в процессе восстановления пациента. Это создаёт оптимальные условия для того, чтобы человек мог сосредоточиться на своём здоровье и восстановлении, не отвлекаясь на неприятные или неудобные условия. В некоторых случаях может быть предложено кодирование, а также получение дополнительных данных и консультаций для более точного подхода к лечению.
Разобраться лучше – наркологическая помощь стационар
mostbet download mostbet download
mostbet pariuri live mostbet pariuri live
Нарколог на дом в Воронеже с конфиденциальным выездом, капельницами и поддержкой пациента в наркологической клинике «Частный медик 24»
Подробнее тут – врач нарколог на дом
мостбет казино бонус за депозит http://mostbet26849.help
Комплексное лечение в наркологическом стационаре включает несколько последовательных этапов, каждый из которых направлен на решение конкретных задач. Начальный этап включает в себя медицинское вмешательство, направленное на устранение токсинов из организма, и стабилизацию общего состояния пациента. Далее начинается реабилитация, которая помогает закрепить достигнутые результаты и восстановить психоэмоциональное состояние пациента. Для выбора подходящего стационара стоит ознакомиться с отзывами и дополнительной информацией о клинике, а также уточнить, в каком районе города она расположена.
Детальнее – наркологический стационар
mostbet expressbank mostbet expressbank
После оформления вызова нарколог приезжает к пациенту и проводит комплексную оценку состояния. Врач измеряет давление, частоту пульса, оценивает уровень сознания и выраженность симптомов. На основании полученных данных формируется план лечения, который реализуется сразу на месте.
Получить дополнительные сведения – запой нарколог на дом нижний новгород