Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать принадлежит ли область памяти программе, по указанному указателю 
V
    Опции темы
KaraKum
  Дата 24.7.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Доброе время суток.
Есть ли возможность узнать принадлежит ли память программе по имеющемуся указателю?
PM MAIL WWW   Вверх
xvr
Дата 24.7.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Можно. Поставить ловушку на SEGV и прочесть память по указателю. Если сигнала не последовало - то принадлежит

PM MAIL   Вверх
azesmcar
Дата 24.7.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Зачем это нужно если не секрет?
PM   Вверх
KaraKum
Дата 24.7.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Для отладки иногда нужно узнать при использовании какого указателя возникает "segmentation fault".
PM MAIL WWW   Вверх
azesmcar
Дата 24.7.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Ну вариант xvr подходит. А вообще - дебагером не лучше?
PM   Вверх
MAKCim
Дата 24.7.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(xvr @  24.7.2009,  11:33 Найти цитируемый пост)
Поставить ловушку на SEGV и прочесть память по указателю. Если сигнала не последовало - то принадлежит

а если адрес пренадлежит метаданным аллокатора? ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
xvr
Дата 27.7.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(MAKCim @ 24.7.2009,  22:31)
Цитата(xvr @  24.7.2009,  11:33 Найти цитируемый пост)
Поставить ловушку на SEGV и прочесть память по указателю. Если сигнала не последовало - то принадлежит

а если адрес пренадлежит метаданным аллокатора? ;)

Вроде как 'метаданные аллокатора' тоже принадлежат 'программе', так что условия исходного вопроса выполняются.
Если хочется большего - можно прилинковать к себе valgrind и спрашивать у него (только не спрашивайте у меня - как  smile )

PM MAIL   Вверх
MAKCim
Дата 27.7.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(xvr @  27.7.2009,  12:00 Найти цитируемый пост)
Вроде как 'метаданные аллокатора' тоже принадлежат 'программе'

программа - это то, что передается в execve
аллокатор - это libc. т. е не программа  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
xvr
Дата 27.7.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(MAKCim @ 27.7.2009,  13:30)
Цитата(xvr @  27.7.2009,  12:00 Найти цитируемый пост)
Вроде как 'метаданные аллокатора' тоже принадлежат 'программе'

программа - это то, что передается в execve
аллокатор - это libc. т. е не программа  smile

Ааа, в этом смысле  smile Тогда на попадание в САМ аллокатор - в map программы (через /proc/self/maps), а если надо именно ДАННЫЕ, то к терапев valgrind  smile 
PM MAIL   Вверх
KaraKum
  Дата 29.7.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Ведь для каждого работающего приложения есть таблица, описывающая участки памяти, которые принадлежат программе. Должен быть способ как-то эту таблицу прочитать.
Например в valgrind в конце проверки сообщается о том сколько памяти "окончательно потеряно", сколько "possibly lost" и так далее - вероятно он эту таблицу и читает и сверяет с имеющимися в программе указателями. Я правильно понимаю?

Это сообщение отредактировал(а) KaraKum - 29.7.2009, 00:20
PM MAIL WWW   Вверх
xvr
Дата 29.7.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(KaraKum @ 29.7.2009,  00:18)
Ведь для каждого работающего приложения есть таблица, описывающая участки памяти, которые принадлежат программе. 

Есть такая таблица
Цитата

Должен быть способ как-то эту таблицу прочитать.
Угу, читать /proc/self/maps
Цитата

Например в valgrind в конце проверки сообщается о том сколько памяти "окончательно потеряно", сколько "possibly lost" и так далее - вероятно он эту таблицу и читает и сверяет с имеющимися в программе указателями. Я правильно понимаю?
Нет, он подменяет менеджер кучи (malloc/free/etc), и определяет куски, которые были запрошенны (malloc), но не возвращены (free)

PM MAIL   Вверх
KaraKum
  Дата 29.7.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(xvr @ 29.7.2009,  12:39)
Цитата

Должен быть способ как-то эту таблицу прочитать.
Угу, читать /proc/self/maps

maps - это файл? У меня он почему-то пустой.
PM MAIL WWW   Вверх
xvr
Дата 30.7.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(KaraKum @ 29.7.2009,  11:59)
Цитата(xvr @ 29.7.2009,  12:39)
Цитата

Должен быть способ как-то эту таблицу прочитать.
Угу, читать /proc/self/maps

maps - это файл? 

Файл

Цитата

У меня он почему-то пустой.



Код

> cat /proc/self/maps

00400000-00405000 r-xp 00000000 08:03 110240                             /bin/cat
00504000-00505000 rw-p 00004000 08:03 110240                             /bin/cat
00505000-00526000 rwxp 00505000 00:00 0 
2a95556000-2a95557000 rw-p 2a95556000 00:00 0 
2a95586000-2a95588000 rw-p 2a95586000 00:00 0 
2a95588000-2a983d1000 r--p 00000000 08:05 1028442                        /usr/lib/locale/locale-archive
35f8700000-35f8715000 r-xp 00000000 08:03 78964                          /lib64/ld-2.3.4.so
35f8814000-35f8816000 rw-p 00014000 08:03 78964                          /lib64/ld-2.3.4.so
35f8b00000-35f8c2b000 r-xp 00000000 08:03 78965                          /lib64/tls/libc-2.3.4.so
35f8c2b000-35f8d2b000 ---p 0012b000 08:03 78965                          /lib64/tls/libc-2.3.4.so
35f8d2b000-35f8d2d000 r--p 0012b000 08:03 78965                          /lib64/tls/libc-2.3.4.so
35f8d2d000-35f8d30000 rw-p 0012d000 08:03 78965                          /lib64/tls/libc-2.3.4.so
35f8d30000-35f8d34000 rw-p 35f8d30000 00:00 0 
7fbfffe000-7fc0000000 rw-p 7fbfffe000 00:00 0 
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 


PM MAIL   Вверх
KaraKum
  Дата 30.7.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



 smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0989 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.