Память процесса
-
В этой статье описывается общее устройство того как процесс использует память
Весь код процесса выполняется в его памяти, память процесса это выделенная область в оперативной памяти компьютера, которая может изменять свой размер динамически и начинается с загрузки .exe файла процесса при его запуске.
Память выделяется страницами, обычно минимальный размер страницы на windows это4096 байт
, то есть меньше этого значения быть не может при выделении. Когда выделяется память, просто говоря - для процесса резервируется больший участок в оперативной памяти.
У памяти бывают разные типы защиты, этим определяются типы памяти, которые могут быть использованы для сужения региона поиска в Cheat Engine, настройки предоставлены здесь:В полях сверху можно указать начальный адрес поиска и конечный, между которыми будет осуществляться поиск, а ниже можно указать типы памяти среди которых будет вестись поиск. Галочка означает что поиск будет вестись только по этому типу, отсутствие галочки - только без этого типа, а с квадратиком - и в том типе и в этом. Все регионы памяти могут иметь несколько типов защиты одновременно, основные типы защиты памяти:
Writable память - записываемая, та, которая позволяет записывать в себя новую информацию заменяя старую, обычно в этой памяти хранятся изменяемые значения.
Executable память - исполняемая, та, которая исполняется потоками проходящими по ней, в которой хранятся машинные коды, которые отображаются как ассемблерные инструкции, обычно она не Writable, но если приложение генерирует исполняемые инструкции на лету, как например Java приложения, тогда она будет Writable.
Readable память - читаемая, та, которая может быть прочитана. Этот флаг есть почти у всех регионов памяти.
Подробнее про CopyOnWrite можно прочитать здесь.
Если поток попытается сделать операцию с памятью которая не позволяет этого из за своего типа защиты, приложение будет закрыто с ошибкой. Помните об этом в дальнейшем. Посмотреть тип текущей страницы памяти с которой вы работаете можно через Cheat Engine, в нижней части окна отладчика:
Положение верхнего и нижнего окна (отслеживаемый адрес) не связаны, поэтому не забывайте перейти по адресу в нижнем окне на адрес верхнего, если вам нужно и не запутайтесь в них. Нижнее окно показывает значения, тип значений может быть изменён через контекстное меню:
Верхнее показывает машинные коды преобразованные в ассемблерные инструкции.
Вы можете выделить новую страницу в памяти процесса для своих нужд, сделать это можно через меню инструментов:
После выделения памяти через Cheat Engine, она будет иметь разрешения и на запись, и на чтение, и на исполнение, вы можете делать что угодно в этой памяти:
Size на изображении указан 1000, это 4096 в шестнадцатеричной системе счисления, потому что для примера я выделила одну страницу памяти.