Как выглядит карта памяти процесса Windows?

Это может быть повторяющийся вопрос. Я хочу знать, как выглядит карта памяти процесса Windows? Ищу подробности. Пожалуйста, предоставьте ссылки на блоги, статьи и другую соответствующую литературу.


person Bruce    schedule 15.04.2011    source источник
comment
Книга Windows Internals - хороший источник подобной информации. Вы также можете использовать VMMap, чтобы увидеть структуру определенного процесса.   -  person Luke    schedule 15.04.2011
comment
@ Люк, это хорошее предложение (VMMap), вы должны указать это в ответе. Это дает вам красивое цветовое представление адресного пространства. Windows Internals также является хорошим предложением.   -  person    schedule 16.04.2011


Ответы (1)


Мне всегда нравится действительно видеть вещи, а не просто читать теорию. Согласно этому сообщению в блоге, оказывается, что если вы откроете программу с помощью windbg, даже когда он не запущен, он все равно отображается в адресное пространство, как если бы он был. Таким образом, ваше окно дизассемблирования образно (не гарантируется загрузка вашего кода по этим точным адресам) показывает вам, что находится по этим адресам с точки зрения кода:

WinDbg работает

Конечно, вы не можете гарантировать эти адреса благодаря ASLR, но это дает вам представление / заставляет задуматься: адреса памяти также являются просто кодом. Код и память хранятся в одном (виртуальном) пространстве в соответствии с архитектурой фон Неймана, которая большинство современных компьютеров реализуют. К сожалению, поскольку нет стека, кучи и т. Д., Вы не можете их переместить и посмотреть.

Это сообщение в блоге Microsoft дает вам общий обзор виртуального адресного пространства. Как видите, половина его зарезервирована для использования операционной системой, а вторую половину вы можете заполнить всем, что у вас есть (код, вызовы malloc, выделение стека и т. Д.).

Что касается того, как адресное пространство работает на стороне пользователя, эта диаграмма помог мне понять это. Он связан в этом вопросе, который предоставляет серия приличных ссылок на различные возможные карты. Однако помните, что макет в памяти будет отличаться по частям.

Важно помнить, что все это, программа, данные, стек, куча, ядро, представляет собой одну большую последовательную серию адресов памяти, хотя они могут или не могут фактически транслироваться в фактические адреса памяти.

Пока вы занимаетесь этим, вам также может быть интересно, как исполняемый файл отображается на диске. Эта статья и в этой статье, в частности, содержится более подробный анализ формата PE-файла. В последней статье также есть небольшая диаграмма, примерно показывающая, как данные отображаются в формате mmap.

person Community    schedule 15.04.2011