определите переполнение буфера в C

#c #compiler-errors #overflow #buffer-overflow

#c #ошибки компилятора #переполнение #переполнение буфера

Вопрос:

Я запутался в этом коде, переполнен буфер или нет, потому что я не инициализирован. Что я понимаю, так это то, что если я изменю int len = 64, это приведет к переполнению

Пожалуйста, помогите мне понять этот код

Комментарии:

1. Какие аргументы командной строки вы передаете?

2. Что находится внутри фу o ?

3. Ваш массив string не может содержать строку длины len , но только len-1 . Вы забыли завершающий 0 байт. Условие должно быть strlen(argv[1] gt;= len) , и, конечно, вы должны сначала проверить if (argc gt; 1) , прежде чем получить доступ argv[1]

4. Вы уже получаете переполнение, если предоставляете строку длиной 24. Не нужно подниматься до 64.

5. Да, копирование len 1 байтов в string вызывает переполнение, а создание lengt;24 также вызывает переполнение при копировании buf[24] . Вы знаете свои размеры, вы можете легко видеть, когда вы храните слишком много данных.

Ответ №1:

Ваша функция «foo» — ошибка,вы не можете вернуть «o».

Комментарии:

1. Добро пожаловать в SO. Это не отвечает на вопрос, касающийся переполнения. но должен быть комментарий. Если у вас недостаточно репутации, чтобы писать комментарии, это не причина использовать вместо этого ответ.