Защита памяти и передача управления в стек
Читаю книгу "Искусство эксплойта" и в какой то момент демонстрируется уязвимость переполнения буфера. В стек программы внедряется шелл-код, на который после передается управление. Попытался повторить, однако получил ошибку сегментации. Так ли работает защита памяти? Вот пример:
void some_func()
{
char buffer[20];
int i;
strcpy(buffer, "\x90\x90\x90\x90");// - Обычные NOP инструкции процессора
for(i = 5; i != 10; ++i)
{
*((unsigned*)buffer + i) = buffer;// - Адрес возврата функции перезаписывается на адрес массива
}
}
В отладчике, в регистре инструкций процессора уже записался адрес buffer. Однако выполнение следующей инструкции выдало ошибку сегментации памяти.