Рассмотрим следующую программу на C:
int main(void)
{
char string[10] __attribute__ ((aligned(32)));
int i;
int *intp = (int*)(string + 1 );
printf("string: 0x%x, intp: 0x%x\n", string, intp);
for (i=0; i<10; i++)
{
string[i] = 10;
}
dump(string);
printf("*intp: 0x%x\n", *intp);
*intp = 0xEEEEEEEE;
dump(string);
return 0;
}
Так что я в основном заставлял ЦП обращаться к 32-битным данным (int) по смещенному адресу. TBH Я надеялся на segfault на моей плате ARM9. Но вместо этого я получил интересный / запутанный результат:
После установки intp равным 0xEEEEEEEE, вывод строки показывает:
0xee, 0xee, 0xee, 0xee, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa
Таким образом, код фактически изменил первый элемент в строке! Почему?
Спасибо