· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Что делает __chkesp() ?

Посл.отвђт Сообщенiе


Дата: Окт 13, 2004 16:43:13

Добрый день. Компилятор выдал asm - код С программы и в нем вызов call __chkesp.
Вопрос: Где можно полюбопытствовать на предмет работы этой функции?


Дата: Окт 13, 2004 17:21:15

Эта штука вставится автоматом даже при отключенных опциях типа stack checking и пр., если ты выделил переменных на стеке больше 4кб. Нада это чтобы реализовать механизм разрастания стека в винде - а то ты выделишь 10000000 на стеке и обратишься к первому элементу - и "перелитишь" через гуард пейджи - что системе все адресное пространство ниже стека гуардить?


Дата: Окт 13, 2004 18:03:20

... а что она делает, если можно ...


Дата: Окт 13, 2004 18:25:59

> если ты выделил переменных на стеке больше 4кб
Фига, рост стэка обеспечивает __chkstk
а __chkesp проверяет после вызова функции баланс стэка на предмет чтобы ты не вызвал функцию с неправильным calling convention. Чтобы компилятор не генерил такой код рекомендуется компилить release версию а не debug.


Дата: Окт 13, 2004 18:37:33 · Поправил: _animaTOR_

... спасибо большое. Извините, а можно ли получить asm - код программы без этой функции (имееется в виду
EXTRN __chkesp:NEAR), в обычном режиме *.asm формируется в папке debug и только с этой функцией.


Дата: Окт 13, 2004 19:26:41

Опциями компилятора естесно, например
cl.exe /FA /Fa"listing.asm" test.c


Дата: Окт 13, 2004 21:39:59 · Поправил: semen

Dr.Golova
Да - сорри попутал - протер очки :) - esp и stk в глазах одинаково видится...
На скока я помню __chkstk просто обрящается к каждой странице выделяемой на стеке. А __chkesp вообще состоит из инструкции jnz error и ret.


Дата: Окт 14, 2004 04:03:15

_animaTOR_
формируется в папке debug и только с этой функцией
Среди опций командной строки debug-версии есть опция /GZ. Удали ее.


Дата: Окт 14, 2004 08:57:21

... Огромное Человеческое Спасибо !! Заработало ВСЕ и разными способами вопрос с Вашей Помощью - решен !


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065