Какой инструмент может поймать переполнение буфера в C? [закрытый]

Добавление перечислений является довольно общей вещью сделать, если Вы вернетесь к исходному коду и редактированию, то любой другой путь (наследование или отражение, если любой возможен), вероятно, возвратится и поражать Вас, когда Вы получите обновление библиотеки, и они представили то же перечислимое имя или то же перечисление значений - я видел много кода низкого уровня, где целое число соответствует к двоичному кодированию, где Вы столкнулись бы с проблемами

Идеально, перечисления ссылки кода должны быть записаны, как равняется только (или переключатели), и попытайтесь соответствовать требованиям завтрашнего дня, не ожидая, что перечислимый набор будет константой

8
задан Fredrik 15 November 2009 в 08:54
поделиться

9 ответов

Попробуйте cppcheck . У меня это сработало.

5
ответ дан 5 December 2019 в 14:03
поделиться

Поскольку valgrind работает с двоичными файлами, он не обнаружил ничего плохого в этом коде. Проверьте эти ( http://www.thefreecountry.com/programming/debuggers.shtml ) статические анализаторы исходного кода, они должны найти. Если они не работают, PC-lint ( http://www.gimpel.com/html/pcl.htm ) справится с этим ....

2
ответ дан 5 December 2019 в 14:03
поделиться

Rational Purify довольно хорошо работает с обнаружением переполнения буфера, утечек памяти, повреждений и т. Д. Однако это довольно дорого.

Пакет mem, упомянутый в этом ответе SO ] может быть другим вариантом.

1
ответ дан 5 December 2019 в 14:03
поделиться

Coverity (инструмент статического анализа) поймет это.

1
ответ дан 5 December 2019 в 14:03
поделиться

Если это на Linux, я бы сначала попробовал valgrind, думаю, он справится.

Изменить: Если это похоже на SiegeX говорит, что, я думаю, valgrind этого не делает (что имеет смысл, потому что у него нет возможности вставлять охранники в стек, поскольку он участвует только во время выполнения процесса). Тем не менее, это хороший инструмент, который стоит иметь в своем ящике для инструментов, поэтому я сохраню сообщение.

0
ответ дан 5 December 2019 в 14:03
поделиться

Переполнение буфера в C довольно сложно обнаружить, поскольку оно не происходит до времени выполнения. Чтобы свести к минимуму вероятность его возникновения, вам следует использовать несколько более безопасные стандартные библиотечные функции, которые выполняют некоторую проверку границ - например, fgets () вместо gets ().

Если вы вручную манипулируете большим количеством массивов, вам, вероятно, следует написать модульные тесты чтобы проверить крайние случаи в ваших алгоритмах. Cmockery - это пример инфраструктуры модульного тестирования для C.

0
ответ дан 5 December 2019 в 14:03
поделиться

Valgrind не обнаруживает переполнения в автоматическом и статическом хранилище. По крайней мере, не по умолчанию.

0
ответ дан 5 December 2019 в 14:03
поделиться

visual studio (с -Zi я думаю, но я могу ошибаться) улавливает такое назначение с помощью средства проверки стека времени выполнения. Это не то бесплатное решение для Linux, которое вы предпочитаете, но оно отлично работает.

0
ответ дан 5 December 2019 в 14:03
поделиться

Я думаю, что в этом случае подразумевается нулевой символ, поскольку вы ссылаетесь на буквальную строку. Следовательно, d [4] все еще находится в границах (представьте d как const char *) .... Я могу ошибаться.

-1
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: