Что означает начало памяти процесса - PullRequest
0 голосов
/ 29 апреля 2011

Я пытаюсь узнать больше о том, как читать память процесса.Поэтому я открыл «всю память» процесса Firefox в WinHex и увидел следующие шестнадцатеричные значения, начинающиеся со смещения 10000.

00 00 00 00 00 00 00 00 EC 6B 3F 80 0C 6D 00 01 EE FF EE FF 01 00 00 00

Мой вопрос: возможно ли для человека интерпретировать это без дополнительных знаний?Это указатели или значения?Есть ли что-то общее для разных программ, созданных разными компиляторами, в отношении памяти процесса, кроме таких вещей, как порядок байтов?Почему это начинается с большого количества нулей, разве это не очень странный способ начать использовать пробел?

1 Ответ

3 голосов
/ 29 апреля 2011

Очевидно, что вы ничего не можете сделать "без дополнительных знаний". Но мы уже знаем многое из того факта, что это Windows. Для начала мы знаем, что исполняемый файл получает свое собственное представление о памяти, и в этом виртуальном представлении исполняемый файл загружается по своему предпочтительному начальному адресу (как указано в заголовке PE EXE-файла).

Начало в 0x00010000 совместимо с MS-DOS (да, это 16-битная ОС) - первые 64 КБ зарезервированы и никогда не являются действительными адресами. Страницы размером до 0x00400000 (4 МБ) зарезервированы для ОС и, как правило, отличаются в разных версиях ОС.

Распространенной структурой данных в этом диапазоне является Блок среды процесса. С помощью инструмента WinDBG и сервера Microsoft Symbol Server вы можете определить, действительно ли блок Process Envirionment расположен со смещением 0x10000 и что означает его содержимое.

...