Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.77
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
#1

Почему функция gets опасная? - C++

22.12.2009, 00:01. Просмотров 3774. Ответов 2
Метки нет (Все метки)

Компилирую программу с помощью G++,
и компилятор пишет:

C++
1
warning: the `gets' function is dangerous and should not be used.
Но почему?

И если опасна, то приведите, пожалуйста, код, где она действительно может чего-нибудь плохого натворить...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2009, 00:01     Почему функция gets опасная?
Посмотрите здесь:

Почему-то на работает функция!( C++
Почему функция передает не то значение C++
Почему не работает функция? C++
Почему не работает функция? C++
Почему не работает выведенная функция C++
C++ WinAPI Почему не работает функция MoveFile?
Почему не работает функция Matricav? C++
почему не работает функция? C++
C++ Почему не работает функция getline ()?
C++ Почему функция всегда возвращает 0?
C++ Почему не находится функция clrscr?
Почему выполняется функция? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0PP0$1T3
5 / 5 / 1
Регистрация: 21.12.2009
Сообщений: 6
22.12.2009, 00:20     Почему функция gets опасная? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
char *gets(char *); <- это прототип функции, видите, нигде не задан размер вводимой строки, поэтому, можно легко получить ошибку (при наличии некоторых знаний легко приводимую к хакерской атаке) преполения буфера, например:
C++
1
2
3
4
5
void main()
{
   char  _Str[100];
   gets(_Str);
}
что будет, если я введу 101 символ? а будет вот что: уже после выделенной памяти под строку в стеке запишется последний сивол, что приведёт к порче слкдующих за строкой данных, а если строка в стеке последняя, тогда сивол затрёт IP - (не путать с адресом) instruction pointer - адрес, куда передать управдение после работы функции, на этом и основана хакерская атака - затереть IP таким образом, чтобы управление перешло по нужному хакеру адресу, где и выполнится вредоносный код
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
22.12.2009, 00:30  [ТС]     Почему функция gets опасная? #3
>> 0PP0$1T3

Круто. Теперь есть, чем заняться...
Yandex
Объявления
22.12.2009, 00:30     Почему функция gets опасная?
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru