从_chkstk说起,谈谈用户栈的管理

上周在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. 1,分配栈空间所需的虚拟内存,大小为Stack Reserve Size
  2. 2,根据Stack Commit Size锁定内存页面,如果Stack Commit Size小于Stack Reserve Size的话,需要增加一个Page,这个额外申请的Page用作Guard Page之用。
  3. 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源码

81,024 条评论

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

  2. В статье рассматриваются различные стратегии борьбы с зависимостями, включая проверенные методы и реальные истории успеха. Читатель узнает, какие подходы наиболее эффективны и как начать путь к выздоровлению.
    Секреты успеха внутри – капельница от запоя цена москва

  3. Вывод из запоя на дому в Подольске востребован, когда человек несколько дней принимает алкоголь, не может самостоятельно выйти из запойного периода и тяжело переносит отказ от спиртных напитков. Наркологическая помощь позволяет провести осмотр, определить стадии алкогольной интоксикации и подобрать лечение с учетом физического и психического самочувствия. При допустимой клинической картине вывод из запоя проводится на дому, а при угрозы серьезных осложнений больной направляется в стационар. Главная задача состоит в безопасном выведении из острого состояния и создании условий для дальнейшего лечения алкоголизма.
    Изучить вопрос подробнее – vyvod-iz-zapoya-kruglosutochno

  4. Наши услуги доступны всем жителям Челябинска, обеспечивая доступность помощи для каждого пациента. Вы можете обратиться к нам независимо от вашего места проживания.
    Выяснить больше – вывод из запоя анонимно

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

  6. Что дома уже не отлежаться. Голова чугунная, руки трясутся. Капельница от похмелья — И человеку становится легче. Потом возвращаются силы. Капельница на дому Нижний Новгород — Без осуждения и лишних вопросов. Можете ознакомиться по ссылке: стоимость капельницы от запоя https://pohmelye.kapelnica-ot-zapoya-nnovgorod.ru И про круглосуточный выезд для региона. Не мучайтесь, если можно помочь.

  7. Нужна бесплатная юридическая консультация? Переходите по запросу задать вопрос адвокату в Мытищах и получите помощь опытных правозащитников в любой области права: семейные споры, долги и кредиты, недвижимость, трудовые конфликты, защита прав потребителей и многое другое. Задайте вопрос юристу онлайн или обратитесь по телефону горячей линии из любого региона России. Консультация доступна круглосуточно и без регистрации.

  8. Если ситуация требует круглосуточного наблюдения, лабораторной диагностики, постоянного контроля показателей или использования сложного оборудования, врач предложит клинику. Такое решение связано не с удобством персонала, а с безопасностью человека. В стационаре доступны комплексные диагностические процессы, современное оборудование, лабораторные исследования и возможность быстро изменить лечение при возникновении осложнений.
    Ознакомиться с деталями – kapelnica-ot-pohmelya-na-domu

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

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

  11. Сайт заблокирован, и всё. Особенно обидно, когда матч вот-вот начнётся. 1xbet официальный сайт — И без обхода блокировок. И ты снова в личном кабинете. 1xbet вход по номеру телефона — Только через актуальное зеркало. Вся информация доступна здесь: 1xbet скачать зеркало 1xbet скачать зеркало И про казино официальный сайт для ставок. Иногда достаточно просто открыть рабочее зеркало.

  12. Всё под рукой, в любое время. Но браузерная версия тормозит. Скачать 1xbet официальный сайт — А не что попало. Всё на месте, как и было. Скачать 1xbet на андроид — Берёшь apk с официального сайта. Можете ознакомиться по ссылке: 1xbet скачать 1xbet скачать И про мобильную версию для телефона. И всё работает стабильно.

  13. Why his bets would not go through on mobile. And it kept kicking him out. 1xbet download — told him to just get the app. Bets went through instantly. 1xbet apk download — that was his solution. All the details are available here: 1xbet login download 1xbet login download There you will find 1xbet application for your phone. Do not waste time with sketchy mirrors.

  14. Сайт заблокирован, и всё. Особенно обидно, когда матч вот-вот начнётся. 1хбет зеркало на сегодня — это тот же сайт. И ты снова в личном кабинете. 1xbet vxod — Без лишних сложностей. Вся информация доступна здесь: 1xbet вход по номеру телефона 1xbet вход по номеру телефона И про казино официальный сайт для игроков. Не теряйте доступ к аккаунту.

  15. Наркологическая клиника «Похмельная служба» в Балашихе оказывает помощь при алкоголизме, наркомании, длительных запоях, наркотической зависимости и связанных с ними расстройствах. Лечение в клинике строится по индивидуальному плану: нарколог оценивает текущее самочувствие пациента, особенности употребления спиртного или психоактивных веществ, хронические болезни и предыдущий опыт обращения за помощью. Лечение алкоголизма может включать вывод из запоя, детоксикацию, восстановление организма, кодирование, психотерапию и реабилитацию. При наркомании лечение дополняют снятием ломки, работой психиатра, психолога и программами социальной адаптации.
    Узнать больше – наркологическая клиника цены

  16. Сначала нарколог уточняет длительность запоя, объем спиртных напитков, общее физическое состояние, хронические болезни и применяемые препараты, потом измеряет давление, пульс, температуру и оценивает сознание. На каждом этапе необходимы точные действия: детокс, очищение, нормализация водно-солевого обмена и наблюдение. Однако эффективность зависит не от количества лекарств, а от квалифицированного подбора. Если больной попал в выраженное состояние, помощь на дому не заменяет диспансер или стационар, где мониторинг проводится постоянно.
    Подробнее – вывод из запоя на дому цена Екатеринбург

  17. Однажды понял, что с телефона ставить удобнее. Вот и решил поставить приложение. 1xbet скачать последнюю версию — Главное взять актуальный файл. Всё на месте, как и было. Скачать 1xbet на андроид — для андроида вообще просто. Можете ознакомиться по ссылке: 1xbet скачать ios 1xbet скачать ios И про казино для айфона. Не ставьте сомнительные сборки.

  18. Всё под рукой, в любое время. Но браузерная версия тормозит. 1xbet скачать — Главное взять актуальный файл. Установил, залогинился. 1xbet mobi скачать — И ставишь. Можете ознакомиться по ссылке: 1xbet скачать apk 1xbet скачать apk И про казино для телефона. Иногда достаточно взять с проверенного источника.

  19. Why his bets would not go through on mobile. And it kept kicking him out. 1xbet download android — told him to just get the app. He installed it, logged in. 1xbet apk download — Simple apk, installed in seconds. All the details are available here: 1xbet new 1xbet new There you will find 1xbet application for betting. Do not waste time with sketchy mirrors.

  20. Нужен врач и капельница под контролем. А дела не ждут. Капельница от запоя — это когда врач приезжает сам. Сначала уходит интоксикация. Вывод из запоя в Нижнем Новгороде — работает и ночью. Можете ознакомиться по ссылке: капельница от похмелья на дому стоимость капельница от похмелья на дому стоимость Там и про вывод из запоя на дому цена для региона. Не мучайтесь, если можно помочь.

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

  22. Запой может длиться от нескольких дней до недель. Чем больше стаж алкогольной зависимости и чем старше зависимый, тем осторожнее должен проходить выход. Врач учитывает длительность запойного периода, количество спирта, сочетание с пивными и крепкими напитками, наличие диабета, болезней сердца, печени и других патологий. Особое внимание требуется при сахарном диабете, циррозе, риске инсульта или инфаркта, а также в пожилом возрасте.
    Ознакомиться с деталями – наркология вывод из запоя в Екатеринбурге

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

  24. Why his bets would not go through on mobile. And it kept kicking him out. 1xbet mobile download — told him to just get the app. And the whole thing changed. Download 1xbet apk — Simple apk, installed in seconds. All the details are available here: 1xbet ios download 1xbet ios download And 1xbet mobile site for your phone. And everything runs the way it should.

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

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

  27. После бурной недели бывает так плохо. Ни есть, ни спать. Капельница от запоя — это когда врач приезжает сам. Потом возвращаются силы. Капельница на дому Нижний Новгород — И в выходные. Можете ознакомиться по ссылке: вызвать капельницу от запоя вызвать капельницу от запоя И про стационар для региона. Иногда один звонок решает всё.

  28. В этом обзоре представлены различные методы избавления от зависимости, включая терапевтические и психологические подходы. Мы сравниваем их эффективность и предоставляем рекомендации для тех, кто хочет вернуться к трезвой жизни. Читатели смогут найти информацию о реабилитационных центрах и поддерживающих группах.
    Что ещё? Расскажи всё! – цены на вывод из запоя на дому

  29. Эта медицинская заметка содержит сжатую информацию о новых находках и методах в области здравоохранения. Мы предлагаем читателям свежие данные о заболеваниях, профилактике и лечении. Наша цель — быстро и доступно донести важную информацию, которая поможет в повседневной жизни и понимании здоровья.
    Тыкай сюда — узнаешь много интересного – зависимость 24

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

  31. Чтобы обеспечить безопасное выведение психоактивных веществ и восстановление организма, применяется детоксикация под контролем врача-нарколога и анестезиолога-реаниматолога.
    Получить больше информации – лечение наркомании архангельск

  32. Вывод из запоя в Екатеринбурге — медицинская помощь при длительном употреблении алкоголя, выраженной интоксикации и абстиненции. Запой нарушает работу сердца, печени, почек, сосудов и мозга, а резкое прерывание употребления спиртного иногда вызывает ломки, тревогу, бессонницу, судороги и делирий. Поэтому главное — не заниматься самолечением, а обратиться к врачу. Наркологическая клиника может организовать вывод из запоя на дому или лечение в стационаре. Врач оценивает физическое и психическое состояние пациента, длительность запоя, возраст, хронические заболевания и лекарства, которые уже применяются.
    Изучить вопрос подробнее – вывод из запоя на дому Екатеринбург

  33. Информация об обращении не передается третьим лицам, а детали лечения обсуждаются только с пациентом.
    Изучить вопрос подробнее – vyvod-iz-zapoya-s-vyezdom

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

  35. Доктор знает, какие препараты допустимы в конкретный момент, когда показан домашний формат, а когда нужен стационар. Нарколог не должен обещать избавить от алкогольной зависимости за один раз. Сначала требуется вывести пациента из острого состояния, восстановить основные показатели и сформировать план дальнейшего лечения алкоголизма.
    Дополнительная информация – anonimnyj-vyvod-iz-zapoya

  36. Услуги на дому удобны, когда курс уже определен врачом либо требуется выездная консультация с решением о допустимости внутривенной терапии. Медицинский специалист приезжает на дом с оборудованием и материалами, оценивает состояние обратившегося, уточняет состав препарата, объем раствора и скорость введения. Время капельницы зависит от схемы лечения. Для Москвы доступна круглосуточная запись, а выезд в Московскую область согласуется по адресу и загрузке персонала.
    Ознакомиться с деталями – https://nadomu2.kapelnica-ot-zapoya-v-moskve14-1.ru/

  37. Поэтому родственникам не советуют самостоятельно использовать ампулы, сильнодействующие препараты или попробовать лечение средствами, найденными по советам из открытые источников. Дисульфирам, седативные лекарства и препараты других групп имеют противопоказания. Их неправильное применение иногда приводит к отравления, ухудшению работы сердца и иным осложнениям.
    Дополнительная информация – http://2vyvod-iz-zapoya-podolsk77.ru

  38. Клиника располагается в зелёной зоне на окраине города, что обеспечивает тишину и возможность уединённого выздоровления. Интерьеры помещений спроектированы с учётом принципов эргономики и психотерапевтического комфорта: мягкое освещение, натуральные материалы, удобная мебель. Все сотрудники прошли специальную подготовку по работе с зависимыми пациентами и знают, как создать доверительную атмосферу с первого визита.
    Подробнее можно узнать тут – http://lechenie-narkomanii-arkhangelsk0.ru/lechenie-narkomanii-i-alkogolizma-arkhangelsk/https://lechenie-narkomanii-arkhangelsk0.ru

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

  40. Если интересует вкусной едой https://kulinarika.ru поможет найти идеи для приготовления. На сайте представлены салаты и закуски. Полезно изучить способ приготовления блюд. Выбирайте подходящие рецепты и находите новые идеи для домашнего меню.

  41. Хочешь ставку сделать. Всё быстрее и под рукой. 1xbet скачать — А не с сомнительного файлообменника. Ставки, история, баланс — всё на месте. 1xbet скачать ios — Через сайт букмекера. Можете ознакомиться по ссылке: 1xbet mobii 1xbet mobii Там и про 1xbet mobi для андроида. И всё работает без проблем.

  42. Опытный врач оценивает пациента комплексно. Значение имеют не только жалобы, но и частота дыхания, пульс, уровень сознания, длительность приема спиртного и сопутствующая патология. Наркологическая клиника рекомендует обращаться за лечением раньше, чем интоксикация приведет к серьезному отравлению или осложнению хронических болезней.
    Ознакомиться с деталями – preparaty-dlya-vyvoda-iz-zapoya

  43. Amma haradan başlayacağını bilmirdi. Mən ona dedim ki, əvvəlcə etibarlı sayt tapmaq lazımdır. Kazino — bu sadəcə oyun deyil. Kazino oyunları — Yoxlamaq lazımdır. Bütün məlumatlar burada: kazino az kazino az Həm də etibarlı saytlar haqqında yazılıb üçün oyunçular. Tələsməyin, yoxlamadan oynamayın.

  44. Tried to bet from my tablet. Kept refreshing, still nothing. Download 1xbet apk — sorted it out in a couple of minutes. Balance, bets, live lines. Download 1xbet apk for android — Download the apk, tap install. All the details are available here: 1xbet game 1xbet game And 1xbet mobile site for iOS. Do not grab random files off the web.

  45. I wanted to bet from my phone. Kept trying again and again. 1xbet download — Just grabbed the app. And everything was right there. Download 1xbet apk — And you are good to go. All the details are available here: 1xbet game 1xbet game And 1xbet download ios for iOS. The official source is enough.

  46. Нужна бесплатная юридическая консультация? Переходите по запросу бесплатная консультация адвоката онлайн без звонков в Мытищах и получите помощь опытных правозащитников в любой области права: семейные споры, долги и кредиты, недвижимость, трудовые конфликты, защита прав потребителей и многое другое. Задайте вопрос юристу онлайн или обратитесь по телефону горячей линии из любого региона России. Консультация доступна круглосуточно и без регистрации.

  47. Опытный врач оценивает пациента комплексно. Значение имеют не только жалобы, но и частота дыхания, пульс, уровень сознания, длительность приема спиртного и сопутствующая патология. Наркологическая клиника рекомендует обращаться за лечением раньше, чем интоксикация приведет к серьезному отравлению или осложнению хронических болезней.
    Ознакомиться с деталями – https://2vyvod-iz-zapoya-podolsk77.ru/

  48. Специалисты регулярно помогают при интоксикации, запоях, абстиненции и сложных состояниях зависимости.
    Изучить вопрос подробнее – narkologicheskaya-klinika-na-dom

发表回复

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