Life is a life... We are the humans...
Смотрите код:



#include <stdio.h>



int main () {



char p[1];

printf("Test:";);

gets(p);

printf("%s\n",p);

return 0;

}





А теперь внимание, вопрос: сколько надо ввести символов чтобы получить переполнение???

Комментарии
13.01.2005 в 18:28

MrXaK

не совсем. то, что переменная описана в этой же функции, еще не означает, что она будет расположена между буфером ввода и заголовком фрейма. если она распологается "ниже", то ее добавление влияет лишь на число, вычитаемое из esp при входе в функцию и никаким образом не отодвигает буфер от сохраненного в стеке значения ebp
13.01.2005 в 18:57

а меня вот что заинтересовало : несколько вариаций кода



работает :

int main () {

char p[1];

p[0]=1;p[1]=1;p[2]=1;p[3]=1;



p[4]=1;

printf("%s\n",p);

return 0;

}



не работает:

int main () {

char p[1];

p[0]=1;p[1]=1;p[2]=1;p[3]=1;



p[4]=1;

p[5]=1;

printf("%s\n",p);

return 0;

}



работает:

int main () {

char p[1];

p[0]=1;p[1]=1;p[2]=1;p[3]=1;



p[4]=1;

p[5]=1;

p[6]=1;

printf("%s\n",p);

return 0;

}



работает:

int main () {

char p[1],c; //--- из-за //char c;

p[0]=1;p[1]=1;p[2]=1; p[3]=1;



p[4]=1;

p[5]=1; //-- и без него работает и с ним

p[6]=1; //-- и без него работает и с ним

printf("%s\n,c",p);

return 0;

}



на данный момент у меня сессия так что "внутрь" лезть пока я не хочу. вотъ. у меня сейчас другое на уме.





PS: может кто уже читал

http://www.karganov.ru/Poems/debugpoem.html

http://www.karganov.ru/Poems/prog.html
13.01.2005 в 19:09

гым. это уже и в самом деле начинает смахивать на нездоровое маньячество :)



BrerRabbit

выложи генерируемый асмный код - посмотрим, почему оно еще работало :)
13.01.2005 в 21:55

Life is a life... We are the humans...
dermeister

хм... ясна...



BrerRabbit

вот... это уже интересно... хм... надо будет разобраться поподробнее...

ещё подождать что Шилдт ответит... я ему письмо уже давно написал )))

з.ы. а ссылочки прикольные))