从_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,238 条评论

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

  2. Помню, у знакомых была ситуация. И понеслось: бумажки, инстанции. Согласование перепланировки — это не одна справка, а целый путь. Но в любом случае без проекта никуда. И соседи жалуются, и УК составляет акт. Узаконивание перепланировки — И времени на всё в обрез. Рекомендую ознакомиться с источником: услуга оформлению перепланировки https://pereplanirovka-kvartir-adg.ru Там и про проект перепланировки для региона. Иногда штраф дешевле не станет.

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

  4. При сформированном алкоголизме организм адаптируется к постоянному присутствию этанола. Резкий отказ вызывает абстинентный синдром, который отличается от обычного похмелья. У пациента может развиваться выраженная тревога, бессонница, тремор, тошнота, нарушение давления, учащенное сердцебиение и психическое возбуждение. В тяжелых случаях появляются судороги и признаки делирия.
    Узнать больше – https://vyvod-iz-zapoya-krasnoyarsk69.ru/

  5. Ни оплатить, ни снять деньги. Обзвонил кучу мест. Оформить зарубежную карту — И другой процесс оформления. Через сервисы, которые работают с россиянами. Как получить зарубежную карту — вариантов хватает. Вся информация доступна здесь: иностранные банки в россии оформить карту https://oformit-zarubezhnuyu-kartu.ru Там и про оформление карт зарубежных банков для поездок. Иногда оформление занимает не один день.

  6. Помню, знакомые затеяли ремонт. Стена с нишей, трубы не там, где надо. Заказать кухню — это когда делают под вашу квартиру. Потом делают 3D-проект. Кухни на заказ каталог с ценами — И уже потом заказывать. Вся информация доступна здесь: кухни на заказ СПб каталог производителя https://zakazat-kuhnyu-azm.ru И про заказ с техникой и сборкой для жителей Северной столицы. Иногда производство занимает не один день.

  7. Ниже собраны основные тематические направления, связанные с вытрезвлением, лечением алкоголизма, работой нарколога, восстановлением организма, реабилитацией и помощью родственникам. Плитка не содержит ссылок и используется как дополнительный тематический блок страницы.
    Подробнее – нарколог на дом вывод из запоя Екатеринбург

  8. Знакомая ситуация. Но ничего не подходило. Заказать кухню по размерам с выездом замерщика — А не подгоняют стандартный гарнитур. И только после этого запускают в производство. Каталог кухонь от производителя — И уже потом заказывать. Можете ознакомиться по ссылке: каталог кухонь на заказ Санкт-Петербург https://zakazat-kuhnyu-bkr.ru Там и про каталог кухонь Глория для жителей Северной столицы. Не откладывайте на последний момент.

  9. И вдруг понял, что его карта нигде не работает. Обзвонил кучу мест. Оформить зарубежную карту — Тут другой банк, другие правила. Кто-то оформляет удалённо. Карта зарубежного банка для россиян — Но важно понимать, что подходит именно вам. Вся информация доступна здесь: оформить карту зарубежного банка оформить карту зарубежного банка И про карты банков СНГ для россиян. Проверяйте варианты заранее.

  10. Помню, знакомые затеяли ремонт. Но ничего не подходило по размерам. Заказать кухню по размерам с выездом замерщика — это когда делают под вашу квартиру. Сначала замерщик приезжает. Каталог кухонь от производителя — Понять, что нравится. Вся информация доступна здесь: кухни Глория СПб каталог https://zakazat-kuhnyu-azm.ru И про кухни на заказ с ценами по городу. Не откладывайте на последний момент.

  11. Помню, знакомые затеяли ремонт. Стена с нишей, трубы не там, где надо. Заказать кухню по дизайн-проекту 3D — А не подгоняют стандартный гарнитур. Сначала замерщик приезжает. Кухни на заказ каталог с ценами — можно сначала посмотреть варианты. Вся информация доступна здесь: кухни Глория СПб каталог https://zakazat-kuhnyu-cyj.ru И про кухни на заказ с ценами по городу. Не откладывайте на последний момент.

  12. Абстинентный синдром возникает после прекращения употребления алкоголя или наркотиков. Врач оценивает выраженность жалоб и выбирает терапию. Клиника контролирует лечение и реакцию на препараты. Не следует проводить самолечение при тяжелом синдроме.
    Получить больше информации – наркологическая клиника клиника помощь в Красноярске

  13. Вывод из запоя в клинике в Санкт-Петербурге осуществляется под круглосуточным медицинским контролем с применением современных методов инфузионной терапии, препаратов для восстановления обменных процессов и купирования синдрома отмены. Главной задачей врачей является восстановление баланса между физическим и психическим состоянием, предотвращение осложнений и стабилизация основных жизненных функций.
    Подробнее тут – наркологическая клиника цены в санкт-петербурге

  14. А потом узнали, что это уже перепланировка. А они даже не знали, с чего начать. Перепланировка согласование — И без опыта тут легко утонуть. Но в любом случае без проекта никуда. И соседи жалуются, и УК составляет акт. Узаконивание перепланировки — Даже если БТИ уже составило протокол. Рекомендую ознакомиться с источником: согласование перепланировки в москве согласование перепланировки в москве И про то, как узаконить уже сделанное для Москвы. Иногда штраф дешевле не станет.

  15. Самостоятельно оценить степень риска сложно. Иногда человек выглядит относительно удовлетворительно, но в течение следующих часов состояние ухудшается. Именно поэтому врач при выводе из запоя оценивает работу сердечно-сосудистой и нервной системы, наличие обезвоживания, состояние сознания и сопутствующие заболевания. Такая диагностика позволяет решить, где безопаснее проводить лечение — на дому или в стационаре.
    Дополнительная информация – https://vyvod-iz-zapoya-krasnoyarsk69.ru/

  16. Помню, у знакомых была ситуация. БТИ, Мосжилинспекция. Согласование перепланировки — С проектом, экспертизами и комиссиями. Если стена несущая, всё сложнее. Отдельная история, когда перепланировка уже сделана. Оформление перепланировки — И времени на всё в обрез. Рекомендую ознакомиться с источником: оформление перепланировки квартиры в москве оформление перепланировки квартиры в москве И про то, как узаконить уже сделанное для Москвы. Иногда штраф дешевле не станет.

  17. Знакомая ситуация. Но ничего не подходило. Заказать кухню по дизайн-проекту 3D — А не подгоняют стандартный гарнитур. Сначала замерщик приезжает. Каталог кухонь от производителя — можно сначала посмотреть варианты. Можете ознакомиться по ссылке: каталог кухонь на заказ от производителя СПб https://zakazat-kuhnyu-bkr.ru Там и про каталог кухонь Глория по городу. Проверяйте варианты заранее.

  18. Бывает, человек пьёт неделю. Тут важно не тянуть. Анонимный нарколог на дом при запое — И выводит человека из этого состояния. Сначала уходит интоксикация. Вывод из запоя на дому круглосуточно — работает круглосуточно. Вся информация доступна здесь: вывод из запоя на дому анонимно вывод из запоя на дому анонимно И про срочный выезд для Иркутска. Обращайтесь к специалистам.

  19. Помню, знакомые затеяли ремонт. Стена с нишей, трубы не там, где надо. Заказать кухню — И учитывают каждую мелочь. Потом делают 3D-проект. Каталог кухонь на заказ СПб — можно сначала посмотреть варианты. Вся информация доступна здесь: каталог кухонь под заказ каталог кухонь под заказ Там и про каталог кухонь Глория для жителей Северной столицы. Проверяйте варианты заранее.

  20. Объездили кучу салонов, но ничего не подходило. То размеры не те. Кухни от производителя СПб — это когда делают под вашу квартиру. Сначала смотришь каталог. Кухня на заказ СПб от производителя недорого — можно и недорого. Советую глянуть источник: кухни в питере https://kuhni-spb-dkv.ru И про Глорию по городу. Не откладывайте на последний момент.

  21. Но ничего не нравилось. То размеры не те. Кухни от производителя СПб — это когда делают под вашу квартиру. И только после этого запускают в производство. Кухни Глория СПб — А не через посредников. Советую глянуть источник: кухни кухни И про Глорию для Санкт-Петербурга. Проверяйте варианты заранее.

  22. А старая кухня совсем развалилась. То размеры не те, то ниша неудобная. Заказать кухню — И учитывают каждую мелочь. Сначала замерщик приезжает. Кухни на заказ каталог с ценами — Понять, что нравится. Можете ознакомиться по ссылке: смотреть каталог кухонь на заказ https://zakazat-kuhnyu-bkr.ru Там и про каталог кухонь Глория по городу. Иногда производство занимает не один день.

  23. Помню, знакомые затеяли ремонт. Сначала смотрели готовые варианты. Заказать кухню по дизайн-проекту 3D — А не подгоняют стандартный гарнитур. Потом делают 3D-проект. Кухни на заказ каталог с ценами — Понять, что нравится. Вся информация доступна здесь: каталог кухонь с ценами СПб https://zakazat-kuhnyu-cyj.ru И про заказ с техникой и сборкой для Санкт-Петербурга. Иногда производство занимает не один день.

  24. И сразу начали искать кухню. То материалы не те. Кухни на заказ СПб — это когда делают под вашу квартиру. Сначала смотришь каталог. Заказать кухню СПб — А не через посредников. Советую глянуть источник: купить кухню от производителя https://kuhni-spb-dkv.ru И про Глорию для Ленобласти. Иногда производство занимает не один день.

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

  26. Лечение на дому подходит не всем. Если состояние пациента стабильное и врач не выявляет признаков опасных осложнений, может проводиться выездная детоксикация. Если же есть признаки тяжелого отравления алкоголем, выраженные нарушения сознания, судороги или неадекватное поведение, требуется осмотр специалистов и решение вопроса о стационарной помощи. При угрозе жизни нужна экстренная помощь скорой.
    Узнать больше – вывод из запоя цена в Екатеринбурге

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

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

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

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

  31. Бывает, человек пьёт неделю. И лучше доверить его врачу. Анонимный нарколог на дом при запое — Осматривает, ставит капельницу. Потом стабилизируют давление. Прерывание запоя на дому — работает круглосуточно. Вся информация доступна здесь: вывод из запоя на дому цена вывод из запоя на дому цена И про капельницу для вывода из запоя по городу. Иногда промедление стоит здоровья.

  32. При подобных проявлениях врач решает, подходит ли лечение на дому. Иногда безопаснее сразу попасть в отделение наркологии, где есть оборудование, анализы крови, мониторинг и возможность экстренного вмешательства. Клинику можно выбрать заранее или обратиться в ближайший профильный диспансер.
    Узнать больше – вывод из запоя на дому круглосуточно в Екатеринбурге

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

  34. При появлении тяжелых признаков не следует рисковать. Отравление суррогатным алкоголем, потеря сознания, судороги, тяжелая одышка или психоз являются основанием для срочной оценки врачами. В подобных обстоятельствах домашнее вытрезвление и обычная капельница могут быть недостаточны.
    Изучить вопрос подробнее – https://vyvod-iz-zapoya-v-ekaterinburge24.ru/

  35. Лечение на дому подходит не всем. Если состояние пациента стабильное и врач не выявляет признаков опасных осложнений, может проводиться выездная детоксикация. Если же есть признаки тяжелого отравления алкоголем, выраженные нарушения сознания, судороги или неадекватное поведение, требуется осмотр специалистов и решение вопроса о стационарной помощи. При угрозе жизни нужна экстренная помощь скорой.
    Получить больше информации – https://vyvod-iz-zapoya-v-ekaterinburge24.ru/

  36. Такие состояния могут стремительно развиться и привести к смерти. Если возникла угроза жизни, следует обеспечить покой, вызвать врачей и не экспериментировать с самолечением. Медики при необходимости организуют перевод в больницу.
    Ознакомиться с деталями – https://vyvod-iz-zapoya-v-ekaterinburge23.ru/

  37. Если у пациента есть тяжелые сердечно-сосудистые болезни, психозы, судорожный синдром или подозрение на смешанное отравление, домашняя капельница может быть ограничена по возможностям. В стационаре доступны более широкая диагностика, круглосуточная линия дежурной помощи и палаты для контроля динамики. Это особенно важно, когда вывод из запоя осложнен сопутствующей патологией.
    Изучить вопрос подробнее – вызвать сделать капельницу врача от запоя

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

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

  40. Экстренное вытрезвление в Челябинске — помощь при острых состояниях. Мы обеспечиваем быстрое и безопасное восстановление после сильного алкогольного опьянения.
    Изучить вопрос глубже – наркология вывод из запоя челябинск

  41. Собрался за границу. Ни оплатить отель. Открыть зарубежную банковскую карту — Тут другой процесс. Кто-то едет за границу и делает там. Оформление карт зарубежных банков — вариантов хватает. Советую глянуть источник: карта банка снг https://oformit-zarubezhnuyu-kartu-xyt.ru И про удалённое открытие для оплаты за рубежом. Не откладывайте на последний момент.

  42. Объездили кучу салонов. То цена кусается. Кухни от производителя СПб — А не продают то, что есть на складе. Потом замерщик приезжает. Кухни Глория СПб — можно и недорого. Вся информация доступна здесь: кухня глория кухня глория И про Глорию для Ленобласти. Не откладывайте на последний момент.

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

  44. А потом сам не может остановиться. И лучше доверить его врачу. Нарколог вывод из запоя — И выводит человека из этого состояния. Сначала уходит интоксикация. Вызов нарколога на дом запой — работает круглосуточно. Вся информация доступна здесь: вызов врача вывод из запоя вызов врача вывод из запоя И про срочный выезд для Московской области. Не тяните до последнего.

发表回复

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