上周在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源码
В этой статье мы рассмотрим современные достижения в области медицины, включая инновационные методы лечения и диагностики. Мы обсудим важность профилактики заболеваний и роль технологий в улучшении качества здравоохранения. Читатели узнают о влиянии медицины на повседневную жизнь и ее значение для современного общества.
Разобраться лучше – вывод из запоя круглосуточно
melbet règlement des gains http://www.melbet04739.help
melbet лаки джет melbet лаки джет
mostbet profilga kirish mostbet profilga kirish
Выбор между домашней помощью и стационарным лечением часто определяется степенью физиологической зависимости, наличием сопутствующих патологий и риском развития осложнений. В условиях клиники исключаются внешние триггеры, обеспечивается полная изоляция от источников психоактивных веществ и создается контролируемая терапевтическая среда, где медицинские решения принимаются на основе объективных диагностических показателей, а не субъективных ощущений пациента. Такой подход критически важен для предотвращения тяжелых осложнений, минимизации дискомфорта абстиненции и формирования устойчивой базы для дальнейшей противорецидивной работы.
Получить дополнительные сведения – http://vyvod-iz-zapoya-v-staczionare-nizhnij-novgorod-10.ru/
Наркологическая помощь в Воронеже: профессиональное лечение зависимостей, выезд врача, анонимная помощь в наркологической клинике «Клиника Плюс».
Подробнее можно узнать тут – круглосуточная наркологическая помощь воронеж
vavada bonus Hrvatska vavada bonus Hrvatska
Вывод из запоя на дому с медицинским контролем в Екатеринбурге предлагает множество преимуществ, которые делают этот метод более удобным и безопасным для многих людей. Отсутствие необходимости в госпитализации и наличие профессионального контроля являются основными положительными аспектами этой услуги.
Детальнее – вывод из запоя на дому в екатеринбурге
Вывод из запоя на дому — это формат медицинской помощи, при котором лечение проводится в привычной для пациента обстановке с выездом нарколога. Такой подход используется, когда требуется срочное вмешательство, но состояние позволяет обойтись без госпитализации. В наркологической клинике «Частный медик 24» помощь оказывается круглосуточно, с возможностью начать терапию сразу после обращения и без ожидания.
Узнать больше – http://vyvod-iz-zapoya-na-domu-sankt-peterburg-9.ru
Запой сопровождается выраженной интоксикацией, нарушением сна, слабостью, тревожностью и колебаниями давления, что характерно для алкоголизма и других форм зависимости. При этом самостоятельный выход из состояния часто оказывается затруднённым из-за ухудшения самочувствия и невозможности контролировать симптомы. В таких случаях выезд нарколога позволяет начать лечение без задержек и помочь пациенту снизить нагрузку на организм за счёт отсутствия транспортировки.
Получить дополнительную информацию – http://vyvod-iz-zapoya-na-domu-sankt-peterburg-8.ru
Стационарное лечение рассматривают при состояниях, когда после длительного употребления алкоголя сохраняется выраженное ухудшение самочувствия и требуется наблюдение в течение более продолжительного времени. Обычно речь идет о нескольких днях запоя, тяжелой интоксикации, выраженной слабости, дрожи в руках, бессоннице, тревоге, скачках давления, сердцебиении, тошноте и признаках обезвоживания. В таких случаях значение имеет не только снятие острых симптомов, но и контроль общего состояния на протяжении всего периода выхода из запоя.
Исследовать вопрос подробнее – нарколог вывод из запоя в стационаре санкт-петербург
1win kupon kodu haraya yazılır https://www.1win81936.help
Капельница от похмелья — это медицинская процедура, направленная на быстрое устранение симптомов интоксикации и восстановление работы организма после употребления алкоголя. В отличие от самостоятельных попыток справиться с состоянием, инфузионная терапия позволяет воздействовать на причину недомогания, а не только на его проявления. В наркологической клинике «Похмельная служба» помощь организуется с учётом состояния пациента и проводится под контролем врача.
Подробнее можно узнать тут – kapelnicza-ot-pokhmelya-voronezh-4.ru/
Непрерывное наблюдение — ключевое отличие стационарного формата. В палатах клиники «Стармед» установлены системы мониторинга витальных показателей, позволяющие фиксировать изменения артериального давления, частоты пульса, температуры и дыхания в реальном времени. Медицинский персонал дежурит круглосуточно, что обеспечивает мгновенную реакцию на ухудшение состояния: коррекцию инфузионной терапии, введение симптоматических препаратов, привлечение профильного психиатра при необходимости. Кроме того, стационар создает терапевтическую среду, свободную от бытовых конфликтов, финансовых стрессов и социального давления, которые часто провоцируют срыв в первые дни трезвости. Пациент получает режим, адаптированный под этап восстановления: дозированную физическую активность, сбалансированное диетическое питание, физиотерапевтические процедуры и регулярные консультации с психотерапевтом. Такой комплексный подход минимизирует дискомфорт и формирует базу для последующей психологической работы.
Подробнее тут – наркология вывод из запоя в стационаре нижний новгород
vavada wejście na stronę vavada2001.help
Банк требует погашения долга с поручителя? Даже если заемщик не платит, у вас есть законные способы защитить свои права. Переходите по запросу банкротство поручителя физического лица. Процедура помогает списать неподъемные долги, остановить взыскания, звонки и судебные претензии. Поможем разобраться в ситуации, подготовим документы и сопроводим процесс на каждом этапе. Консультация — конфиденциально и с учетом вашей ситуации.
melbet скачать без блокировки https://melbet73624.help/
melbet activation bonus melbet activation bonus
Состояние после длительного употребления алкоголя или наркотических веществ сопровождается комплексом симптомов: обезвоживание, нарушение работы сердечно-сосудистой системы, тревожность, бессонница, слабость. В таких случаях важно не откладывать помощь, поскольку самостоятельное восстановление организма может быть затруднено. Наркологическая помощь на дому позволяет быстро стабилизировать показатели и начать контролируемое лечение.
Получить больше информации – вызвать нарколога на дом нижний новгород
Выезд нарколога на дом позволяет быстро устранить эти симптомы, нормализовать состояние пациента и предотвратить дальнейшее ухудшение здоровья.
Детальнее – капельница от похмелья на дому
Выезд врача начинается с оценки состояния пациента. Доктора измеряют давление, пульс, оценивают уровень сознания и выраженность симптомов. После этого формируется план лечения, который реализуется сразу. Такой подход позволяет быстро перейти к стабилизации состояния человека.
Углубиться в тему – http://vyvod-iz-zapoya-na-domu-sankt-peterburg-11.ru/
Перед началом терапии врач проводит осмотр пациента. Измеряются основные показатели, включая давление и пульс, оценивается выраженность симптомов. На основании этих данных формируется состав капельницы и определяется тактика лечения, что позволяет эффективно провести вывод из запоя.
Разобраться лучше – капельница от похмелья цена в воронеже
Первый этап лечения направлен на стабилизацию состояния. Он начинается с оценки витальных показателей и клинической картины. После этого формируется план терапии, в котором определены цели и временные интервалы для оценки результата. Такой подход позволяет контролировать процесс и избегать хаотичных назначений, особенно при лечении алкоголизма.
Углубиться в тему – вывод из запоя в стационаре анонимно
aviator na vavada http://vavada2001.help
Обратился не в первый раз и снова остался доволен. Девушки всегда ухоженные и приятные в общении. Всё проходит спокойно и без накладок. Уровень стабильный – снять шлюх подружек
играть онлайн в
Чикен Роад 2 игровые автоматы и рейтинг казино все на одном сайте
Вывод из запоя на дому с быстрым облегчением в Екатеринбурге — это процедура, направленная на быстрое снятие острых симптомов алкогольного абстинентного синдрома и возвращение пациента к нормальному состоянию, включая случаи алкоголизма и наркомании. Такая услуга удобна тем, что позволяет не только эффективно справиться с зависимостью, но и избавиться от неприятных проявлений запоя, таких как головная боль, тошнота, слабость и психоэмоциональное напряжение, в комфортной домашней обстановке, при этом оказывается наркологическая помощь. Быстрое облегчение без необходимости госпитализации делает этот метод популярным среди пациентов, которым важен быстрый и безопасный результат, а при необходимости можно заказать дальнейшее кодирование или лечение в стационаре.
Изучить вопрос глубже – нарколог на дом вывод из запоя
melbet guide débutant http://melbet04739.help/
мелбет ставки и казино приложение melbet73624.help
К показаниям относятся: запой длительностью более 72 часов, выраженная абстиненция с тахикардией, артериальной гипертензией, профузным потоотделением, наличие в анамнезе алкогольных делириев или судорожных эпизодов, сопутствующие хронические заболевания печени, сердца, поджелудочной железы. При тяжелых формах интоксикации, когда в организме накапливаются токсичные продукты распада веществ, резкое прекращение употребления без медицинской поддержки может спровоцировать отек мозга, острую сердечную недостаточность или желудочно-кишечное кровотечение. Стационар позволяет провести полноценную диагностику, включая ЭКГ, экспресс-анализы крови и мониторинг сатурации, что формирует точную картину состояния и исключает шаблонные назначения. В случаях сочетанной зависимости, когда в анамнезе присутствует наркомании, протоколы детоксикации адаптируются под специфику психоактивных соединений и включают усиленный нейрологический контроль.
Углубиться в тему – наркология вывод из запоя в стационаре в санкт-петербурге
играть онлайн в
Aviator игра игровые автоматы и рейтинг казино все на одном сайте
Терапевтический процесс в стационаре строится по принципу последовательного выполнения клинических задач: диагностика, стабилизация, медикаментозная терапия и подготовка к амбулаторному этапу. При поступлении врач проводит детальный осмотр, собирает анамнез, оценивает неврологический статус и при необходимости назначает лабораторные исследования. На основе полученных данных формируется индивидуальный протокол, учитывающий возраст, длительность интоксикации, наличие сопутствующих патологий и переносимость лекарственных компонентов. Мы применяем только сертифицированные препараты, зарегистрированные в РФ, и строго соблюдаем клинические рекомендации Минздрава, исключая псевдонаучные методики. Стандарты оказания медицинской помощи фиксируются во внутренних регламентах и регулярно проверяются независимыми аудиторами.
Получить больше информации – вывод из запоя в стационаре санкт-петербург
vavada slots http://vavada2008.help/
Банк требует погашения долга с поручителя? Даже если заемщик не платит, у вас есть законные способы защитить свои права. Переходите по запросу юрист по банкротству поручителя. Процедура помогает списать неподъемные долги, остановить взыскания, звонки и судебные претензии. Поможем разобраться в ситуации, подготовим документы и сопроводим процесс на каждом этапе. Консультация — конфиденциально и с учетом вашей ситуации.
Эта обзорная заметка содержит ключевые моменты и факты по актуальным вопросам. Она поможет читателям быстро ориентироваться в теме и узнать о самых важных аспектах сегодня. Получите краткий курс по современной информации и оставайтесь в курсе событий!
Обратитесь за информацией – капельница от похмелья самара
Процесс вывода из запоя начинается с первичной консультации врача, который проводит осмотр пациента, оценивает его состояние и собирает анамнез. На основе полученной информации специалист подбирает индивидуальный план детоксикации, который может включать капельницы с инфузионными растворами, витамины, препараты для нормализации давления, а также средства для снижения симптомов абстиненции, таких как тошнота, головная боль и слабость. Важно, что весь процесс выводится под контролем врача, что гарантирует безопасность и эффективность.
Ознакомиться с деталями – http://vyvod-iz-zapoya-na-domu-ekaterinburg-20.ru
играть онлайн в
дог хаус играть игровые автоматы и рейтинг казино все на одном сайте
1win ekspress 1win81936.help
играть онлайн в
Mega Fortune Dreams игровые автоматы и рейтинг казино все на одном сайте
Отдельно стоит выделить ситуации, когда семья сталкивается не только с алкоголем, но и с употреблением наркотиков. В таких случаях врачебная консультация особенно важна, поскольку последствия интоксикации могут отличаться, а признаки наркомании и алкоголизма иногда накладываются друг на друга. Если речь идет о смешанном употреблении, подход к помощи на дому требует особой осторожности.
Получить дополнительную информацию – нарколог на дом анонимно екатеринбург
играть онлайн в
Aviator игровые автоматы и рейтинг казино все на одном сайте
Первый этап вывода из запоя на дому – это первичная оценка состояния пациента. Врач, прибывший на вызов, осматривает пациента, проверяет уровень алкоголя в крови, измеряет артериальное давление, пульс и температуру. Это необходимо для того, чтобы определить степень алкогольной интоксикации и выбрать правильную тактику лечения.
Разобраться лучше – http://www.domen.ru
Нарколог на дом в Екатеринбурге: выезд врача на дом, лечение запоя и консультации в наркологической клинике «НЕО+».
Разобраться лучше – нарколог на дом анонимно
mostbet kupon toldirish mostbet kupon toldirish
Нарколог на дом в Екатеринбурге: круглосуточный выезд, детоксикация и лечение зависимостей в наркологической клинике «НЕО+».
Выяснить больше – нарколог на дом в екатеринбурге
Вывод из запоя на дому в Санкт-Петербурге с анонимным выездом врача, снятием интоксикации и поддержкой в наркологической клинике «Частный медик 24»
Исследовать вопрос подробнее – vyvod-iz-zapoya-na-domu-sankt-peterburg-12.ru/
Этот увлекательный информационный материал подарит вам массу новых знаний и ярких эмоций. Мы собрали для вас интересные факты и сведения, которые обогатят ваш опыт. Откройте для себя увлекательный мир информации и насладитесь процессом изучения!
Ознакомиться с деталями – врач нарколог выезд
играть онлайн в
Mustang Gold игровые автоматы и рейтинг казино все на одном сайте
property for sale in phuket property for sale in phuket
phuket thailand villas for sale phuket thailand villas for sale