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;
}
А теперь внимание, вопрос: сколько надо ввести символов чтобы получить переполнение???
#include <stdio.h>
int main () {
char p[1];
printf("Test:"

gets(p);
printf("%s\n",p);
return 0;
}
А теперь внимание, вопрос: сколько надо ввести символов чтобы получить переполнение???
не совсем. то, что переменная описана в этой же функции, еще не означает, что она будет расположена между буфером ввода и заголовком фрейма. если она распологается "ниже", то ее добавление влияет лишь на число, вычитаемое из esp при входе в функцию и никаким образом не отодвигает буфер от сохраненного в стеке значения ebp
работает :
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
BrerRabbit
выложи генерируемый асмный код - посмотрим, почему оно еще работало
хм... ясна...
BrerRabbit
вот... это уже интересно... хм... надо будет разобраться поподробнее...
ещё подождать что Шилдт ответит... я ему письмо уже давно написал )))
з.ы. а ссылочки прикольные))