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

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

19.02.2017, 21:25. Показов 2845. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru