proc32.inc Код (Text): macro prologuedef procname,flag,parmbytes,localbytes,reglist { if parmbytes | localbytes push ebp mov ebp,esp if localbytes if localbytes>4095 mov eax, localbytes call __chkstk else sub esp,localbytes end if end if end if irps reg, reglist \{ push reg \} } это рекомендую положить гдето в теле своего кода Код (Text): __chkstk: ; sub_401528+8p ... push ecx lea ecx, [esp+4] sub ecx, eax sbb eax, eax not eax and ecx, eax mov eax, esp and eax, 0FFFFF000h .loc_401014: ; CODE XREF: sub_401000+29j cmp ecx, eax jb .loc_401022 mov eax, ecx pop ecx xchg eax, esp mov eax, [eax] mov [esp+0], eax retn ; --------------------------------------------------------------------------- .loc_401022: ; CODE XREF: sub_401000+16j sub eax, 1000h test [eax], eax jmp .loc_401014 при желании можно в тот же инк всунуть но тогда фасм сорудит лишнюю секцию....хотя смотря где инклуды сидят....
doctor_Ice Код (Text): macro chkstk_impl { __chkstk: .. orig chkstk code } Так проще вставлять куски кода в любое место. Опять же - стандартный макрос лучше не трогать, а просто переопределить его, вызвав оригинальный по надобности.
а верно. и не будет проблем с обновлением фасма. может кто то на форуме фасма запостит про этот недочет и в следующей версии глядиш исправят.
Я бы не назвал это недочётом - редко когда надо выделять больше страницы на стеке, а стандартный chkstk слишком избыточен - можно и поменьше написать. И оформить как отдельный макрос или параметр к объявлению подпрограммы.
и всетаки отсутствие проверки недочет (проверка происходит в макре и на размере компелируемого кода не скажется)...а чек стем мона и получше написать что вообщем не очень важно. а вот важно то что некоторые кодеры даже незнают зачем это нада и редко но найдется чел у которого нестабильно работет прога а он никак не может раздуплится почему. я лично думаю что в проверке больше пользы чем зла =)