Я попробовал этот пример кода на C:переполнения буфера не произошло
int main()
{
int array[5];
int i;
for (i = 0; i <= 255; i++)
{
array[i] = 10;
}
}
и компилировать его с помощью:
gcc -m32 -o a.out buffer2.c
мой вопрос, почему не Сегментация вина?
я использовать Kali Linux 64
VENDOR_ID: GenuineIntel
Название модели Intel (R) ядра (ТМ) i3 CPU M 350 @ 2.27GHz
Архитектура: x86_64
CPU op-mode (s): 32-bit, 64-bit
Байт: Маленький Эндиан
Я редактировал код, добавив следующие две строки:
int main()
{
int x = 12;
int array[5];
int i;
for (i = 0; i <= 255; i++)
{
array[i] = 10;
}
printf("%d\n", x);
}
и что является результатом:
10
Segmentation fault
Вы внесли неопределенное поведение, а это значит, что события не определены. Вы абсолютно * можете * получить ошибку сегментации, но это не гарантия. – turbulencetoo
Неопределенное поведение, ну, не определено - так что это не * определено * как segfault, хотя это часто бывает. (Кстати, переполнение буфера, безусловно, произошло, оно просто не вызвало segfault) –
Переполнение буфера не такое же, как ошибка сегментации. Вы можете переполнять буфер и по-прежнему получать доступ к памяти в адресном пространстве вашего процесса (что является серьезной проблемой безопасности). – Jason