Указатели на несуществующие объекты
1. int *A = (int *) malloc (128); /* выделение места под 128 целых
чисел */
2. int year of birth = read user input (); /* считывание целого числа из
стандартного ввода */
3. if (input < 1900) {
4.
printf ("Ошибка, год рождения должен быть больше 1900 \n");5. free (A);
6. } else {
7. ...
8. /* совершение полезных действий над содержимым массива A */
9. ...
10. }
11. ... /* множество других инструкций, содержащих, malloc и free */
12. A[0] = year of birth;
Код неверен. Не только из-за возрастной дискриминации, но также потому, что в строке 12 он может присвоить значение элементу массива A после того, как выделенная под него память уже была освобождена (в строке 5). Указатель A все еще будет вести на тот же адрес, но его дальнейшее использование уже не предполагается. Фактически память теперь уже могла быть повторно использована другим буфером (см. строку 11).
Вопрос в следующем: что же произойдет? Код в строке 12 будет пытаться обновить содержимое памяти, которая уже больше не используется для массива A, и может изменить другую структуру данных, которая теперь находится в этой области памяти. В общем, это искажение памяти ничего хорошего не принесет, но будет еще хуже, если взломщик сможет манипулировать программой таким образом, чтобы она поместила в эту память конкретный объект кучи, где первое целочисленное значение этого объекта содержит, скажем, уровень авторизации пользователя. Это не всегда просто сделать, но есть технологии (известные как фэншуй кучи — heap feng shui), помогающие взломщикам вытаскивать такие значения. Фэншуй является древнекитайским искусством ориентации зданий, гробниц и памяти в куче благоприятным образом. Если мастер цифрового фэншуя преуспеет в своей работе, то после этого он сможет установить для уровня авторизации любое значение (впрочем, не более чем 1900).
9.7.4.
Еще по теме Указатели на несуществующие объекты:
- УКАЗАТЕЛЬ СОКРАЩЕНИЙ
- Алфавитно-предметный указатель
- Алфавитно-предметный указатель
- АЛФАВИТНО-ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
- Алфавитно-предметный указатель
- Статья 298. Незаконное проведение поисковых работ на объекте археологического наследия, уничтожение, разрушение или повреждение объектов культурного наследия
- ОБЪЕКТ: ПРИВЯЗАННОСТЬ
- ОБЪЕКТ-ЛИБИДО
- ОБЪЕКТ
- НАУКА: ОБЪЕКТ
- ОБЪЕКТ РЕФЕРЕНТНОСТИ
- Тема 6. Объекты гражданских прав
- ОБЪЕКТ СЕКСУАЛЬНЫЙ: ВЫБОР
- 2. Объект аренды.
- Тема 11. Объекты гражданских правоотношений
- ОБЪЕКТ СЕКСУАЛЬНЫЙ: ВЫБОР: ТИП