Что делает __chkesp() ?

Тема в разделе "WASM.WIN32", создана пользователем _animaTOR_, 13 окт 2004.

  1. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    Добрый день. Компилятор выдал asm - код С программы и в нем вызов call __chkesp.

    Вопрос: Где можно полюбопытствовать на предмет работы этой функции?
     
  2. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Эта штука вставится автоматом даже при отключенных опциях типа stack checking и пр., если ты выделил переменных на стеке больше 4кб. Нада это чтобы реализовать механизм разрастания стека в винде - а то ты выделишь 10000000 на стеке и обратишься к первому элементу - и "перелитишь" через гуард пейджи - что системе все адресное пространство ниже стека гуардить?
     
  3. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    ... а что она делает, если можно ...
     
  4. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > если ты выделил переменных на стеке больше 4кб

    Фига, рост стэка обеспечивает __chkstk

    а __chkesp проверяет после вызова функции баланс стэка на предмет чтобы ты не вызвал функцию с неправильным calling convention. Чтобы компилятор не генерил такой код рекомендуется компилить release версию а не debug.
     
  5. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    ... спасибо большое. Извините, а можно ли получить asm - код программы без этой функции (имееется в виду

    EXTRN __chkesp:NEAR), в обычном режиме *.asm формируется в папке debug и только с этой функцией.
     
  6. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Опциями компилятора естесно, например

    cl.exe /FA /Fa"listing.asm" test.c
     
  7. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Dr.Golova

    Да - сорри попутал - протер очки :) - esp и stk в глазах одинаково видится...

    На скока я помню __chkstk просто обрящается к каждой странице выделяемой на стеке. А __chkesp вообще состоит из инструкции jnz error и ret.
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _animaTOR_

    формируется в папке debug и только с этой функцией

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

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    ... Огромное Человеческое Спасибо !! Заработало ВСЕ и разными способами вопрос с Вашей Помощью - решен !