Защита памяти и передача управления в стек

Читаю книгу "Искусство эксплойта" и в какой то момент демонстрируется уязвимость переполнения буфера. В стек программы внедряется шелл-код, на который после передается управление. Попытался повторить, однако получил ошибку сегментации. Так ли работает защита памяти? Вот пример:

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. Однако выполнение следующей инструкции выдало ошибку сегментации памяти.


Ответы (0 шт):