@daniil14056

Почему в с++ не могут избавиться от переполнения буфера?

Не разбираюсь особо в Си(или с++), но не как не могу понять, почему Си(и,или с++) остается самым популярным в мире языком, без которого ни один большой проект обойтись не может, и при этом самым уязвимым, почему не могут избавиться от strcpy, у этой функции даже свое страница на Википедии есть, и ее подобных, просто удалить из исходников , в новой версии, к примеру С++12(или Си компилятор Х).
Ведь половина эксплоитов именно на переполнение, но ведь от всех них можно избавится простой проверкой длинны, или я что-то не знаю.
  • Вопрос задан
  • 290 просмотров
Пригласить эксперта
Ответы на вопрос 6
Jump
@Jump
Системный администратор со стажем.
почему не могут избавиться от strcpy?
Ну наверное по той же причине, по которой на кухне до сих пор не могут избавиться от ножа.

Нож штука очень небезопасная, но ее продолжают использовать на кухне, не смотря на то, что куча народу ежегодно устраняется кухонными ножами.
Ответ написан
doublench21
@doublench21
ОБРАТНАЯ СОВМЕСТИМОСТЬ, слышал?
Нельзя просто взять и удалить эту функцию.
Именно поэтому добавляют новые и советуют ими пользоваться.

5aa56215149d7175407375.jpeg
Ответ написан
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Зачем избавляться от strcpy? Она проста и эффективна, как и большая часть языка C. Проверка длинны строки на каждый символ или просто дополнительная проверка -- это проверка и, как следствие, затраченное время. При определённой культуре программирования, покрытия кода тестами (в том числе и со случайными данными), ревью, и использовании средств статического и динамического анализа, риски можно минимизировать. Взамен вы получаете быстрый и легкий код, практически без оверхеда. Из-за отсутствия оверхеда (тяжёлого рантайма), этот язык популярен для всяких системных вещей (я всё ещё скептически настроен насчёт Rust) + очень много кода на нём уже написано и его надо поддерживать + интерфейсы многих библиотек написаны на C из-за возможных проблем с ABI, в случае C++, например и т.п.
В C++ дела обстоят по-другому, и мешать (а тем более путать) его с C не стоит (ну только, если надо что-то системное дёрнуть в недрах вашего кода или написать обвязки для C библиотеки).
Ответ написан
@res2001
Developer, ex-admin
Сама по себе strcpy - нормальная, просто ею не умеют правильно пользоваться. И она ничего не делает для предотвращения не правильного использования. Зато она быстрее своих более безопасных аналогов.
Улучшенная strncpy сокращает варианты не правильного использования.
Но если тебе важна скорость выполнения, и ты уверен, что хорошо понимаешь как работает функция и предпринял все необходимое, чтоб функция не сработала не правильно, то почему бы и не пользоваться strcpy?
Ответ написан
Комментировать
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Почему в с++ не могут избавиться от переполнения буфера?

Могут и избавились, для тривиальных штук есть контейнеры, строки и всё такое, там всё работает с помощью магии.
но не как не могу понять, почему Си(и,или с++) остается самым популярным в мире языком, без которого ни один большой проект обойтись не может, и при этом самым уязвимым

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

Так можно не использовать. А вообще из C++ очень и очень неохотно выпиливают устаревший функционал для обратной совместимости.
Ответ написан
Комментировать
@wawa
Почему в с++ не могут избавиться от переполнения буфера?

А кто не может? Познакомьте их с теми, кто может.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы