Это может быть дублирующий вопрос. Я хочу знать, как выглядит карта памяти процесса Windows? Я ищу подробности. Просьба предоставлять ссылки на блоги, статьи и другую соответствующую литературу.
Как выглядит карта памяти процесса Windows?
Ответ 1
Мне всегда нравится видеть вещи, а не просто читать теорию. Оказывается, согласно это сообщение в блоге, что если вы открываете программу с помощью windbg, даже если она не работает, она все равно отображается на адресное пространство, как если бы оно было. Таким образом, ваше окно разборки фигурально (не гарантируется загрузка кода на этих точных адресах) показывает вам, что находится на этих адресах с точки зрения кода:
Конечно, вы не можете гарантировать эти адреса благодаря ASLR, но это дает вам идею/заставляет вас думать: адреса памяти - это просто код. Код и память хранятся в одном и том же (виртуальном) пространстве, в соответствии с архитектурой Von Neumann, которую реализуют большинство современных компьютеров. К сожалению, так же, как нет стека, кучи и т.д., Вы не можете двигаться и смотреть на них.
Этот сообщение в блоге от Microsoft дает вам обзор высокого уровня виртуального адресного пространства. Как вы можете видеть, половина из них зарезервирована для использования операционной системой, а другая половина вы можете заполнить тем, что у вас есть (код, malloc
вызовы, распределения стека и т.д.).
В терминах того, как адресное пространство работает на стороне пользователя, эта диаграмма помогла мне понять это. Он связал в этом вопросе, в котором содержится ряд достойных ссылок относительно различных возможных карт. Помните, однако, что макет в памяти будет отличаться по части.
Важно помнить, что все это, программа, данные, стек, куча, материал ядра - это одна большая последовательная серия адресов памяти, хотя они могут или не могут фактически перевести на фактические адреса памяти.
Пока вы на нем, вам также может быть интересно, как исполняемый файл появляется на диске. Эта статья и в этой статье, в частности, анализ формата файла PE. В последней статье также есть небольшая диаграмма, показывающая, как данные mmap'd.