GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Память процесса

    Запланировано Прикреплена Закрыта Перенесена Базовая информация
    memoryпамятьтипы
    1 Сообщения 1 Posters 291 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • PromisingP
      Promising
      отредактировано Promising

      В этой статье описывается общее устройство того как процесс использует память


      Весь код процесса выполняется в его памяти, память процесса это выделенная область в оперативной памяти компьютера, которая может изменять свой размер динамически и начинается с загрузки .exe файла процесса при его запуске.
      Память выделяется страницами, обычно минимальный размер страницы на windows это 4096 байт, то есть меньше этого значения быть не может при выделении. Когда выделяется память, просто говоря - для процесса резервируется больший участок в оперативной памяти.
      У памяти бывают разные типы защиты, этим определяются типы памяти, которые могут быть использованы для сужения региона поиска в Cheat Engine, настройки предоставлены здесь:

      a9a009f1-6354-4807-9f50-d114f3e81acb-изображение.png

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

      Writable память - записываемая, та, которая позволяет записывать в себя новую информацию заменяя старую, обычно в этой памяти хранятся изменяемые значения.

      Executable память - исполняемая, та, которая исполняется потоками проходящими по ней, в которой хранятся машинные коды, которые отображаются как ассемблерные инструкции, обычно она не Writable, но если приложение генерирует исполняемые инструкции на лету, как например Java приложения, тогда она будет Writable.

      Readable память - читаемая, та, которая может быть прочитана. Этот флаг есть почти у всех регионов памяти.

      Подробнее про CopyOnWrite можно прочитать здесь.

      Если поток попытается сделать операцию с памятью которая не позволяет этого из за своего типа защиты, приложение будет закрыто с ошибкой. Помните об этом в дальнейшем. Посмотреть тип текущей страницы памяти с которой вы работаете можно через Cheat Engine, в нижней части окна отладчика:

      e99bdcf5-e2a4-43b3-8468-579fd0e240b4-изображение.png

      Положение верхнего и нижнего окна (отслеживаемый адрес) не связаны, поэтому не забывайте перейти по адресу в нижнем окне на адрес верхнего, если вам нужно и не запутайтесь в них. Нижнее окно показывает значения, тип значений может быть изменён через контекстное меню:

      ab83bc9f-bfdf-4d58-bca5-1b3c43b190d0-изображение.png

      Верхнее показывает машинные коды преобразованные в ассемблерные инструкции.

      Вы можете выделить новую страницу в памяти процесса для своих нужд, сделать это можно через меню инструментов:

      8a7aea6f-8869-4e96-92be-7a9edd176bdc-изображение.png

      После выделения памяти через Cheat Engine, она будет иметь разрешения и на запись, и на чтение, и на исполнение, вы можете делать что угодно в этой памяти:

      05e61fd5-be11-42d0-b977-44a3de6a561f-изображение.png

      Size на изображении указан 1000, это 4096 в шестнадцатеричной системе счисления, потому что для примера я выделила одну страницу памяти.

      1 ответ Последний ответ Ответить Цитировать 2
      • Первое сообщение
        Последнее сообщение