|
|
| Посл.отвђт | Сообщен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 |