Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

Переполнение буфера/кучи   Найти похожие ветки 

 
Zeqfreed ©   (2007-09-08 18:53) [40]

Мнда. Вы чего боитесь то? Система (даже этот ужасный и плохой Линукс!) не даст вам испортить ничьи чужие данные, если только вы не подгрузите свой модуль в ядро. Каждому процессу выделяется свой Виртуальный Анатолий Подгоретский размером до 4 Гб на 32-битных платформах (в Виндоус 2 вроде, в Линукс 3, кажется, но тут не уверен). Почитать можно, например, "Linux: азбука ядра" в соавторстве Стивена Смолски, Гордона Фишера и Клаудии Зальзберг или "Операционные Системы" Таненбаума.


 
Инс ©   (2007-09-08 18:56) [41]


> [40] Zeqfreed ©   (08.09.07 18:53)

Речь не об этом. Испортить данные в своем же адресном пространстве (выход за границы одного массива - и перезапись данных в другом массиве, например).


 
Zeqfreed ©   (2007-09-08 18:57) [42]

> Инс ©   (08.09.07 18:56) [41]

А это уже либо голова на плечах есть, либо ее нет. И статьи тут не помогут, по-моему.


 
Anatoly Podgoretsky ©   (2007-09-08 18:59) [43]


> Виртуальный Анатолий Подгоретский размером до 4 Гб

А если будет выделен app


 
Zeqfreed ©   (2007-09-08 19:01) [44]

> Anatoly Podgoretsky ©   (08.09.07 18:59) [43]

Надеюсь, что app будет достаточно мудр, чтобы правильно отнестись к моей дерзкой выходке :)


 
Галинка ©   (2007-09-08 19:19) [45]

Попробовала написать программку для компилятора gcc, но под виндой.
#include <stdio.h>

int main(){
char satz[10];
printf("Введите строку: ");fflush(stdout);
gets(satz);
printf("%s", satz);
return 0;
}


(про опасность использования gets читала, но попробовать надо же на чем-то). При вводе строки больше, чем на 10 символов, строка принимается, и выводится полностью (!). Никаких ошибок не возникает. Т.е. сооьвествие нигде не проверяется.


 
Галинка ©   (2007-09-08 19:30) [46]

Zeqfreed ©   (08.09.07 18:53) [40]

я ничего пока не боюсь. Просто ищу информацию.


 
Галинка ©   (2007-09-08 20:22) [47]

Удалено модератором


 
Zeqfreed ©   (2007-09-08 20:38) [48]

> Галинка ©   (08.09.07 19:19) [45]

> Никаких ошибок не возникает.

Хе-хе. До тех пор, пока введенаая строка не перезапишет память, где printf вызывается.
А вообще к такому коду одно удовольствие эксплоиты писать.


 
Zeqfreed ©   (2007-09-08 20:43) [49]

А по теме достаточно ознакомиться с http://en.wikipedia.org/wiki/Buffer_overflow и по ссылкам оттуда почитать статьи, если есть какие-то непонятки.


 
Галинка ©   (2007-09-08 20:51) [50]


> Zeqfreed ©   (08.09.07 20:38) [48]


Так поэтому и спрашиваю, как не надо писать.

Нашла, что вроде в OpenBSD сделали StackGuard, который вроде защищает от таких ошибок. А есть ли что-то подобное у других дистрибьютеров: SuSE, RedHat и т.п. Вроде как в стандарт gcc это не включено пока. Или это уже старая инфа, и теперь это стандарт?

Про ввод с клавиатуры понятно. А если вводим строку, скажем, из поля БД? Там тоже есть опасность? Т.е. такой синтаксис вообще опасно применять?


 
Anatoly Podgoretsky ©   (2007-09-08 20:53) [51]

> Галинка  (08.09.2007 20:51:50)  [50]

Что с базы, что с клавиатуры, надо контролировать размер.


 
Галинка ©   (2007-09-08 20:58) [52]

#include <stdio.h>

int main(){

string1 = (char *) malloc (10);

printf ("Please enter a string of 9 characters or fewer.\n");
fflush(stdout);
fgets(string1, 10, stdin);
printf ("\nYou typed the following string:\n%s\n\n", string1);
fflush(stdout);
return 0;
}


вот другая реализация того же самого действия. Вроде все корректно. Какие неудобства может доставить подобная реализация?


 
Zeqfreed ©   (2007-09-08 21:01) [53]

> Галинка ©   (08.09.07 20:51) [50]

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

При работе с базами данных обычно люди используют сторонние библиотеки, в которых вызвращаются указатели на заботливо выделенные области памяти необходимого размера. А также используются типа данных с автоматическим управлением памятью. Не понятно где вы там собрались применять такой синтаксис.


 
Инс ©   (2007-09-08 21:02) [54]


> Нашла, что вроде в OpenBSD сделали StackGuard, который вроде
> защищает от таких ошибок. А есть ли что-то подобное у других
> дистрибьютеров: SuSE, RedHat и т.п. Вроде как в стандарт
> gcc это не включено пока. Или это уже старая инфа, и теперь
> это стандарт?

Иллюзия того, будто бы операционная система может спасти от кривости рук программиста. Конечно, свалить все на систему проще всего.


 
Zeqfreed ©   (2007-09-08 21:06) [55]

> Галинка ©   (08.09.07 20:58) [52]

По-моему во всех реализациях буфер сбрасывается после каждой выведенной строки. Т.е. после \n не нужно вызывать fflush. А так в принципе переполнений здесь быть не должно :)


 
Галинка ©   (2007-09-08 21:08) [56]

Я не собираюсь ничего не на кого сваливать. Почему все только нападают?

Насколько я поняла, системы защиты квази-целостности призваны только сигнализировать, что что-то не так. Т.е. генерируют прерывание если canary word до вызова и после не идентичны. Т.е. если адрес возврата функции переписан чем-то. Они автоматом не исправляют ошибок разработчика.

ПыСы: форумы существуют для общения, а не для проявления чувства превосходства над начинающими.


 
Галинка ©   (2007-09-08 21:10) [57]

Zeqfreed ©   (08.09.07 21:06) [55]

странно, но когда пишу именно в Линуксе, то fflush не требуется. А вот когда связка Win+MinGW+Eclipse почему-то без flush вывод "зависает" ((


 
Zeqfreed ©   (2007-09-08 21:17) [58]

> Галинка ©   (08.09.07 21:10) [57]

Отсюда вывод - писать нужно в Линуксе ;)


 
Галинка ©   (2007-09-08 21:21) [59]

Я и буду. Но пока дома на винде "пристреливаюсь" )) Пробую разные реализации. А на работе есть RedHat )) Т.е. под него и надо будет писать.



Страницы: 1 2 вся ветка

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.022 c
3-1180678681
TCrash
2007-06-01 10:18
2007.10.07
Может ли FB вычислять строковые значения


3-1180465570
tarkus
2007-05-29 23:06
2007.10.07
Использование DISTINCT в LocalSQL


2-1189425493
Romm
2007-09-10 15:58
2007.10.07
Имя файла


6-1170928218
tytus
2007-02-08 12:50
2007.10.07
TWebBrowser и Java.


2-1189091338
Igor_
2007-09-06 19:08
2007.10.07
Шрифт в польской Windows XP