Moje kodu jest jak poniżej:C++ problem alokacji pamięci
#include <string.h>
int main()
{
int ii = 123;
char str[7] = "";
strcpy(str,"123456");
return 0;
}
biegnę to w VS2010, pamięć jest jak poniżej
Jestem ciekaw co cc
w pamięci używane dla? Jak obliczana jest liczba cc
?
I dlaczego MS wybrał "0xCC" jako wartość wypełnienia? Ponieważ '0xCC' jest pojedynczą bajtową instrukcją punktu przerwania w zbiorze instrukcji x86. W ten sposób, jeśli przypadkowo wykonasz niewypełnioną pamięć, natychmiast uderzy ona w punkt przerwania. –
@Rob Nie wiedziałem. :) Przypuszczam, że teraz ma to mniejsze znaczenie teraz, gdy mamy ochronę pamięci? – Mysticial
@Mysticial: not really: to działa tylko na poziomie strony (cała strona może być oznaczona jako wykonywalna lub nie, i tylko wtedy, gdy CPU, system operacyjny i proces wszystkie zgadzają się na włączenie bitów NX). Ale co, jeśli użyjesz 40 bajtów kodu ze strony 2KB? Strona musi być oznaczona jako wykonywalna, co pozostawia resztę strony do wykonania, ale zawiera śmieci :) – jalf