Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Инициализация памяти в malloc

Ответить
Настройки темы
Инициализация памяти в malloc

Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Цитата man malloc:
malloc() выделяет size байт и возвращает указатель на
выделенную
память. Выделенная память не инициализируется.

free() освобождает область памяти, на которую указывает pt
r, которая
быть выделена ранее посредством malloc(), calloc() или
realloc().
У меня ещё один вопрос по "программированию" образовался - функция malloc выделяет память из "кучи", можно-ли с её помощью увидеть какие-то "значения" другой задачи (из сферы безопасности и защиты от взлома).
В принципе этот вопрос важен как для Linux (ту может что-то в ядре найду, так и для Windows - тут я даже не знаю что сказать).

Где-нибудь это может быть официально описано ? Что-бы "сослаться на официальный документ"
Опытным путём установил в Linux - первоначально выделяется пустая память, а дальше в ней то, что я сам положил.

т.е. я имею ввиду цикл :

p1=p=malloc(N)
<проверил - Тут в p* нули>
<заполняю единицами>
free(p)
p2=p=malloc(N)
(заодно проверил, что p1==p2)
<Тут в P* единицы>
free(p)

-------
Поспешай не торопясь


Отправлено: 01:48, 08-06-2005

 

Аватара для Demiurg

Старожил


Сообщения: 339
Благодарности: 8

Профиль | Сайт | Отправить PM | Цитировать


про выделение памяти (Windows or Linux), и про то как это можно использовать в не в полне благонадежных целях была неплохая статья в Хакер'е (страниц десять)... если мне не изменяет память, в 2003 году... что-то там в названии было про HEAP...

-------
Человек тонкого ума живет бескорыстными, высокими интересами, его радости - это искусство, любовь, наука, путешествия, книги...


Отправлено: 09:59, 01-08-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


>> первоначально выделяется пустая память

Насколько мне известно, содержимое памяти после malloc и realloc (в "добавленной" части) вообще не предопределено. И совершенно непредсказуемо, что там будет записано. Поэтому у меня лично есть "манечка" делать memset(p,s,0) даже после calloc и new[]. Так что да, думаю что там могут (после malloc) оказаться данные чужой программы.

Отправлено: 10:32, 01-08-2005 | #3

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


вообще мне казалось так: (цитирую кусок из разговора по аське с ruslandh)
"вообще на С действительно определяется место, выделяется объем, заполняется. Дальще можно со всем этим хозяйством работать через указатели. Увидеть значения другой задачи нельзя при нормальном разделении памяти под задачи. (В старых версиях виндов, насколько я понимаю, этого не было). Кроме того, в тех же виндах (по XP включительно) для приложений уровня драйверв доступны все дескрипторные таблицы (не только своих задач ). В юниксах такого маразма (вроде бы) нет, но возможны ошибки, дающие возможность почитать память откуда не полагается.\x0d\nПро malloc лучше всего, скорей всего, в \"Ветхом завете\" - сиречь у Кернигшана и Ричи."
То есть имхо: содержимое не предопределено, предопределен (нами) размер содержимого, а за разделение памяти между задачами и процессами отвечает система.

Отправлено: 20:13, 04-08-2005 | #4


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


mar
До меня как-то не сразу дошло, получается что ruslandh в самом первом сообщении темы спрашивает, можно ли получить кусок памяти из работающего чужого приложения? Нет, конечно - сразу схлопочем memory access violation. Когда я говорил, что можно получить кусок с данными чужой программы через malloc, я имел в виду, что мы получаем мусор, уже отработанную кем-то память, помеченную в системных ресурсах как свободную для использования, но не зачищенную (ибо зачем?) при предоставлении нашей задаче. Это и только это я имел в виду. О таблицах дескрипторов речи нет. Или там о зачистке памяти из BSS-секции... :]

Отправлено: 23:27, 04-08-2005 | #5

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


hasherfrog
до меня тоже только сейчас дошло: действительно, если задача такая, что ее данные не стоит никому показывать, даже кусками после отработки, то надо, видимо, не просто "уничтожать" выделенную область, но предварительно чистить, заполняя все куски памяти чем-нибудь однородным.

Отправлено: 23:55, 04-08-2005 | #6


Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


Интересно, то, что "погоняв" эту программульку, я, насколько мог убедился, что при первом выделении памяти через malloc - память всегда нулевая, а потом можно видеть свой "муссор" (если-бы это был кусочек вируса, то да ) , также память нулевая, если запрашивается больше определённого размера K.

-------
Поспешай не торопясь


Отправлено: 19:13, 24-08-2005 | #7


Старожил


Сообщения: 345
Благодарности: 0

Профиль | Отправить PM | Цитировать


а можно вообще всю память посмотреть в /dev/mem... тока прова рута нужны %)

-------
Лучше молчать и казаться идиотом, чем заговорить и развеять сомнения...


Отправлено: 13:13, 12-09-2005 | #8



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Инициализация памяти в malloc

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - [решено] Инициализация сети invidia Microsoft Windows 7 5 08-01-2010 17:56
Контроллеры домена на разных сайтах, инициализация :( MaxFactor Microsoft Windows NT/2000/2003 9 28-07-2006 16:59
некоректная инициализация cd диска в cdrome mms Microsoft Windows 2000/XP 3 10-04-2006 14:02
Инициализация принтера curbat Железо во FreeBSD 6 15-03-2005 20:16
Инициализация V.34 в Sportster 33.6 - КАК прописать kvv53 Сетевые технологии 1 13-11-2003 08:12




 
Переход