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.