Проблема при отведении буфера c gcc v3.2.2

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Проблема при отведении буфера c gcc v3.2.2

Eugie » 12 июн 2005, 17:43

Не знаю, как gcc, а VC++ создает stack frame с запасом 64 байта, даже при отсутствии локальных переменных.

flux » 10 июн 2005, 10:43

Тогда просто я думаю этот размер должен быть статичным, проэксперементировав с размером буфера я просто так и не нашел на сколько он прибавляет стек... каждый раз разный размер и четкого алгоритма так я и не выявил...

Eugie » 10 июн 2005, 01:28

Думаю, это какая-то минимальная защита на случай stack overflow. Т.е. фрейм создается 'с запасом', чтобы небольшое переполнение не разрушало стек напрочь. C/C++ компиляторы обычно встраивают в код возврата вызов спец. процедуру проверки целостности стека, типа _chkesp (VC++) - возможно, это требуется для нее.

Проблема при отведении буфера c gcc v3.2.2

flux » 09 июн 2005, 17:29

Прошу помочь кто знает что у меня происходит... Есть элементарная прога на C:

void function() {
char buffer[20];
char *ret;
return;
}
int main() {
function();
return;
}

Почему когда я отвожу буфер в 20 байт в ассемблерном коде я вижу следующее:

function:
pushl %ebp
movl %esp, %ebp
subl $56, %esp

56 байт... почему не 24? вроде буфер 5 слов и указатель 1... 6 в сумме получается...

RH Linux 9.0, gcc v3.2.2 compiler.

Вернуться к началу