|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Инициализация памяти в malloc |
|
Инициализация памяти в malloc
|
info man howto Сообщения: 6958 |
Цитата man 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 |
Старожил Сообщения: 339
|
Профиль | Сайт | Отправить PM | Цитировать про выделение памяти (Windows or Linux), и про то как это можно использовать в не в полне благонадежных целях была неплохая статья в Хакер'е (страниц десять)... если мне не изменяет память, в 2003 году... что-то там в названии было про HEAP...
|
------- Отправлено: 09:59, 01-08-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать >> первоначально выделяется пустая память
Насколько мне известно, содержимое памяти после malloc и realloc (в "добавленной" части) вообще не предопределено. И совершенно непредсказуемо, что там будет записано. Поэтому у меня лично есть "манечка" делать memset(p,s,0) даже после calloc и new[]. Так что да, думаю что там могут (после malloc) оказаться данные чужой программы. |
Отправлено: 10:32, 01-08-2005 | #3 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать вообще мне казалось так: (цитирую кусок из разговора по аське с ruslandh)
"вообще на С действительно определяется место, выделяется объем, заполняется. Дальще можно со всем этим хозяйством работать через указатели. Увидеть значения другой задачи нельзя при нормальном разделении памяти под задачи. (В старых версиях виндов, насколько я понимаю, этого не было). Кроме того, в тех же виндах (по XP включительно) для приложений уровня драйверв доступны все дескрипторные таблицы (не только своих задач ). В юниксах такого маразма (вроде бы) нет, но возможны ошибки, дающие возможность почитать память откуда не полагается.\x0d\nПро malloc лучше всего, скорей всего, в \"Ветхом завете\" ![]() То есть имхо: содержимое не предопределено, предопределен (нами) размер содержимого, а за разделение памяти между задачами и процессами отвечает система. |
Отправлено: 20:13, 04-08-2005 | #4 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать mar
До меня как-то не сразу дошло, получается что ruslandh в самом первом сообщении темы спрашивает, можно ли получить кусок памяти из работающего чужого приложения? Нет, конечно - сразу схлопочем memory access violation. Когда я говорил, что можно получить кусок с данными чужой программы через malloc, я имел в виду, что мы получаем мусор, уже отработанную кем-то память, помеченную в системных ресурсах как свободную для использования, но не зачищенную (ибо зачем?) при предоставлении нашей задаче. Это и только это я имел в виду. О таблицах дескрипторов речи нет. Или там о зачистке памяти из BSS-секции... :] |
|
Отправлено: 23:27, 04-08-2005 | #5 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать hasherfrog
до меня тоже только сейчас дошло: действительно, если задача такая, что ее данные не стоит никому показывать, даже кусками после отработки, то надо, видимо, не просто "уничтожать" выделенную область, но предварительно чистить, заполняя все куски памяти чем-нибудь однородным. |
Отправлено: 23:55, 04-08-2005 | #6 |
info man howto Сообщения: 6958
|
Профиль | Сайт | Отправить PM | Цитировать Интересно, то, что "погоняв" эту программульку, я, насколько мог убедился, что при первом выделении памяти через malloc - память всегда нулевая, а потом можно видеть свой "муссор" (если-бы это был кусочек вируса, то да
![]() |
------- Отправлено: 19:13, 24-08-2005 | #7 |
Старожил Сообщения: 345
|
Профиль | Отправить PM | Цитировать а можно вообще всю память посмотреть в /dev/mem... тока прова рута нужны %)
|
------- Отправлено: 13:13, 12-09-2005 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интернет - [решено] Инициализация сети | 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 |
|