Problem z pamięcią stosu


(przemekKK) #1

Napisałem taki kodzik do testów:

#include 

#include 


void vuln(char *arg)

{

	char buf[3];

	strcpy(buf, arg);

}


int main(int argc, char *argv[])

{

	if(argc>1) vuln(argv[1]);


	std::cout << "Dzialam...\n\n";

	system("pause");

	return 0;

}

I mimo że uruchamiam program z parametrami więcej niż 3 znaki, to nie wyskakuje mi żaden błąd. Przecież powininienem spowodować przepełnienie bufora na stosie i zmodyfikować adres powrotu w funkcji vuln. Z parametrem /GS- dalej jest tak samo. Czy może VC++ 2010 posiada jakieś niewidzialne zabezpieczenie przed buffer overflow?

W trybie Debug przy "AAAAAAAAAAAAAAAA" znakach parametru nadpisuje EIP(adres powrotu). A po skompilowaniu żadnej reakcji.


(Monczkin) #2

przemekKK , nazwij proszę temat konkretnie, bez zbędnych problemów w tytule. Inaczej wyciągnę konsekwencje. Przeczytaj ten temat. viewtopic.php?f=16&t=394978


(etam) #3

Ze strony http://www.cplusplus.com/reference/clib ... ng/strcpy/

Z tego wynika, że to ty musisz zadbać o to, żeby było dobrze, a nie kompilator.

Poza tym może użyj http://www.cplusplus.com/reference/clib ... g/strncpy/