Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209

Карта памяти процесса

19.02.2017, 21:25. Показов 2884. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
полдня копал инет на эту тему. нашел кучу интересных статей, например, https://habrahabr.ru/post/265509/. но везде примерно одно и то же. можно подытожить примерно так:
программа загружается с какого-то адреса (сегменты кода и данных). причем этот адрес обычно не нулевой.
выше находятся области кучи, разделяемых библиотек, стека и место под маппирование.
последний гигабайт - ядро, к которому у процесса напрямую доступа нет.

собственно, сам вопрос: что находится ниже сегмента кода (ведь он загружается не с 0 адреса) и какой доступ со стороны исполняемого процесса к этой области? т.е. это свободная для пользования область (например, для того же mmap) или же это какая-то системная область? и какая?

интересует именно виртуальное адресное пространство.
если можно, нужен более-менее развернутый ответ и при возможности - пару ссылочек на освоение.
заранее премного благодарен.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2017, 21:25
Ответы с готовыми решениями:

Запуска процесса в памяти в бесконечном цикле
Добрый вечер, прошу помочь с заданием: Обязательно использование такой функции как Fork(), можно использовать Kill() На форуме...

у меня nokia 6555.захожу в галерею и нажимаю карта памяти когда её нету и пишет карта память неотформотиравана
захожу в галерею и нажимаю карта памяти когда ийо нету и пишет карта память неотформотиравана подскажите!!плиз!! Добавлено через 1 час...

Чтение памяти другого процесса по таймеру: нужно ли закрывать хэндл процесса?
В моём варианте работает так: По таймеру (0,1 сек) определяю ID процесса по ехе-шнику, получаю хэндл процесса(открываю процесс) ...

7
 Аватар для Emmk
76 / 76 / 30
Регистрация: 12.02.2016
Сообщений: 199
19.02.2017, 22:19
Ниже сегмента кода может находится все что угодно, как свободная память так и занятая каким-то приложением. Вопросы распределения свободного пространства - юрисдикция менеджера памяти. То есть вопрос скорее к архитектуре операционных систем, нежели к прикладному программированию.
Цитата Сообщение от Pink_Pank Посмотреть сообщение
какой доступ со стороны исполняемого процесса к этой области
Никакой, SEGFAULT
Цитата Сообщение от Pink_Pank Посмотреть сообщение
именно виртуальное адресное пространство
А какая разница? Программе это фиолетово.
Цитата Сообщение от Pink_Pank Посмотреть сообщение
при возможности - пару ссылочек на освоение
Исследование модели памяти Linux
Сегментация приложения на си

P.S. Вопрос конечно странный, ну да с кем не бывает Если это так критично знать, читайте код ядра Linux/BSD, либо задайте вопрос на соответствующих форумах или мейнтейнерам ядра.
1
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
20.02.2017, 07:34  [ТС]
Меня опять не поняли..
Цитата: "Никакой, SEGFAULT"
А если через mmap?
Цитата:"А какая разница? Программе это фиолетово"
Разница большая. Программа работает в виртуальном адресном пространстве. И именно оно меня и интересует.
За первую ссылочку спасибо, было интересно, но по моему вопросу ни слова. Вторая ссылка для меня вообще не имела смысловой нагрузки.
Читать исходники конечно можно и нужно, но это займет немало времени и это необходимо будет скорее при желании использовать эти знания, нежели при удовлетворении обычного любопытства. Поэтому надеюсь на быстрый ответ.

Добавлено через 2 минуты
Еще мой вопрос переформулировать можно так: почему в эльф-формате адреса загрузки секций (имеется в виду для исполняемых файлов, а не для перемещаемых библиотек) начинаются с определенного адреса, а не скажем с нуля?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.02.2017, 11:38
В языке Си есть такое понятие как NULL. Т.е. адрес, гарантированно не соответствующий никакому объекту. При обращении по этому адресу удобнее всего ломаться. Поэтому как минимум одна страница виртуальной памяти, содержащая адрес 0, должна быть недоступной, т.к. это самый простой и беззатратный способ обеспечить поломку при обращении по указателю со значением NULL
0
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
20.02.2017, 11:41  [ТС]
Ну, это понятно. Но даже если исключить этот самый пресловутый 0. И начинать загрузку, например, с адреса 4096 (следующая страница). Но у нас-то все начинается с адресов 0x800000 и тому подобное. А остальное гиде?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.02.2017, 12:28
Лучший ответ Сообщение было отмечено Pink_Pank как решение

Решение

Цитата Сообщение от Pink_Pank Посмотреть сообщение
Но у нас-то все начинается с адресов 0x800000
"У нас" - это, вероятно, на i386. Это всё зависит от архитектуры, на каждой архитектуре эти адреса выглядят по разному. Точно не могу сказать, сильное подозрение на какие-то попытки совместимости со старыми системами

Добавлено через 7 минут
Можно поэкспериментировать, подсунуть линкеру разные карты памяти и посмотреть, что из этого получится

Запускаешь

Code
$ gcc t.c -Wl,--verbose
В ответ он тебе выплюнет карту памяти. Она будет совпадать с одной из стандартных (на моём компе они лежат в каталоге /usr/i686-pc-linux-gnu/lib/ldscripts). Далее эту карту памяти можно скинуть в файл, в моём случае это файл t.lds. Далее запускаем с использованием карты памяти из файла

Code
$ gcc t.c -Wl,-T,t.lds
Далее в этом файле попробуй чего-нибудь исправить (типа адресов загрузки) и запустить. Для контроля можно добавить в строку компиляции опцию -Wl,--verbose, чтобы глазками убедиться, что изменения реально подхватились

Добавлено через 46 секунд
Цитата Сообщение от Evg Посмотреть сообщение
В ответ он тебе выплюнет карту памяти
Точнее, скрипт на птичьем языке, описывающий карту памяти

Добавлено через 1 минуту
Описание птичьего языка здесь https://www.opennet.ru/docs/RU... uld-3.html
1
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
21.02.2017, 10:15  [ТС]
Проще, наверное, в готовом elf-e адрес загрузки сегмента ручками в hex-редакторе сменить.. ) Ну, или поэкспериментировать с mmap-ом. ) ладно, попробуем поиграть в угадайку.
По поводу совместимости была такая мысля, но я откинул ее из-за больших значений этих самых стартовых адресов. Слишком много для совместимости... Раньше же все в первом мегабайте было.. Ну.. почти все. ))

Добавлено через 21 час 34 минуты
На Линукксовом форуме дали вот такую ссыль.) Мож кому пригодится
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.02.2017, 10:32
Грубо говоря, на интеле сделано шиворот-навыворот по отношению к другим. У людей принято динамические библиотеки грузить в старшие адреса, а у интела по каким-то соображениям - в младшие
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2017, 10:32
Помогаю со студенческими работами здесь

Как изменить длину строки в памяти процесса (менять ник прямо в памяти игры)
Надо написать программку, способную менять ник в игре прямо в памяти этой игры. но возникла проблема с тем, что длина ника динамическая, и...

Защита памяти процесса от редакторов памяти
Подскажите как можно написать программу которая смогла бы защитить память другого процесса от редакторов памяти. Знаю это довольно трудная...

Карта памяти глючит.
Всем доброго дня. Не знал в какую тему написать, но написал в эту. Вообщем есть карта памяти на 16Gb Sandisk. Вообщем глючит она таким...

Не читается карта памяти
Всем привет!Подскажите пож.Есть 2 карты памяти по 8 гб,но ни одну из них не видит ОС.Причём как и через картридер так и через...

Не читается карта памяти
Доброго времени суток. В один прекрасный день смартфон и компьютер перестали видеть мою карту памяти microSD HC 16Gb. В смысле -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru