Другой просмотрщик виртуальной памяти - VMValidator . Визуальные данные макета памяти, а также данные на страницах памяти и абзацах памяти.
Что касается компоновки PE-файлов, я рекомендую книгу Expert .Net 2.0 IL Assembler , глава 4. Он в основном нацелен на управляемый (.Net) PE-файл, а не на собственный, но действительно описывает, как все это выложено.
Тогда, если вы хотите увидеть некоторый исходный код (C ++), который читает PE-файл, вам следует взглянуть на PE File Format DLL . Существует также графический интерфейс, который показывает вам, как использовать DLL. Лицензия на источник является открытым исходным кодом и не ограничена GPL.
РЕДАКТИРОВАТЬ: Другая рекомендация книги будет Внутри Microsoft Windows 2000 (3-е издание) Дэвида А. Соломона и Марка Е. Руссиновича (парни, написавшие VMMap, упоминали в другом ответе). В этой книге есть разделы об управлении памятью, начиная с макета таблицы страниц и заканчивая более масштабным управлением памятью в макроуровне, и еще одна глава, посвященная различным вопросам, связанным с процессами, потоками и связанными структурами данных.
Что касается разметки PE и размещения виртуальных адресов, DLL загружается в область памяти, которая находится на границе абзаца (64 КБ для x86), выделенной VirtualAlloc (). Защита памяти различных страниц (4K на x86, 8K на x64) внутри этого устанавливается в соответствии с описанием каждого раздела в файле PE (только чтение, чтение / выполнение, чтение / запись) и т. Д. Таким образом, зная PE расположение файлов полезно, поэтому я упомянул об этом.
Если вы планируете экспериментировать с модификацией DLL или выполнять инструментарий, очень полезно иметь инструмент, позволяющий легко просматривать содержимое DLL. Отсюда ссылка на библиотеку формата файла PE. Это также хорошая база для того, чтобы начать с ваших собственных конкретных требований.