Прочитал какой-то текст и играл с попыткой записать за размером массива в переполнение буфера C i.e. Текст указывает, что всякий раз, когда вы пытаетесь написать, чтобы сказать array[5]
, когда длина массива равна 5, вы получаете ошибку сегментации, но я, похоже, не получаю этого, используя код ниже. Код действительно работает.Переполнение буфера на Mac OSX?
#include <stdio.h>
#include <string.h>
int main()
{
int i;
int array[5] = {1, 2, 3, 4, 5};
for (i = 0; i <= 255; i++)
{
array[i] = 10;
}
int len = sizeof(array)/sizeof(int);
printf("%d\n", len);
printf("%d\n", array[254]);
}
Об исполнении последнего утверждения, 10
печатается. Интересно, является ли это уязвимостью или если что-то мне не хватает. Я запускаю код из iterm2 на macbook pro.
Это может иметь какое-то отношение к направлению роста памяти в стеке и его отношению к направлению, в котором процессор перемещается по памяти при последовательном индексировании массива. На x86 стек растет, и процессор поднимается вверх по стеку, поэтому вы можете перезаписать обратный адрес вызывающей функции. – AlexWebr