#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. Это не отвечает на вопрос, касающийся переполнения. но должен быть комментарий. Если у вас недостаточно репутации, чтобы писать комментарии, это не причина использовать вместо этого ответ.