00058. Работа с игровой памятью (Часть 1- статические адреса)
Работа с игровой памятью (Часть 1: статические адреса)|В этом уроке мы будет разбираться со статическими адресами памяти.|wmysterio|wmysterio||||Работа с памятью одна из самых интересных, так как есть возможность творить с ней что угодно. Нужно помнить, что для работы с памятью требуется наличия оригинального exe-шника версии 1.0 US ( скачать ). Также нужно знать адреса памяти, чтобы можно было их редактировать. Я лично и сам даже части адресов не знаю, поэтому обращаюсь к брошюрке, где написано большинство адресов.
Адреса делятся на две большие группы: статические и динамические. Статические адреса можно редактировать когда угодно, а вот динамические имеют структуры, то есть нам нужно узнавать адреса и делать некие смещения. Рассмотрим опкоды для работы с адресами. Их всего два:
Здесь: 0xC0BC15 - адрес памяти 4 - размер данных, которые нужно записать или прочитать 1 - флаг снятия защиты
Для примера, возьмем текстовый файл. Представьте, что это память. В файле есть целая куча строк - это будут адреса. В каждой строчке что то записано - это будет значение. Смещение - это переход между строками, то есть установка курсора на нужное место. "0xC0BC15" - это номер строки. Это число, записанное в шестнадцатеричном виде. Если выделить его в SB и нажать горячие клавиши CTRL+<kbd>H
, то этот загадочный набор будет читабельным для нас - "12631061". Но указывают обычно в шестнадцатеричной системе счисления. value - это значение, то есть то, что содержит строка. Сами значения имеют тип, которые определят размер ( в байтах ) для записи или чтение, указанных в опкодах, как "size". Вот таблица известных мне типов и их размер:
Таблица 1 | |
---|---|
Тип ( type ) | Размер ( size ) |
int32, float, dword | 4 |
int16, word | 2 |
byte, bool | 1 |
Осталось рассмотреть последний параметр "virtual_protect". Это своего рода флаг снятия защиты от записи в память. Если поставить "1" - защита снимается, "0" - остается как есть. Вот список статических адресов: статические адреса памяти.
Я например нашел подходящий адрес: "0xB7CEE4" - вкл/выкл бесконечный бег. Тип значения, которое он может принимать - булево ( bool ), значит размер ( size ) должен быть "1" ( см. Таблица 1 ). Раз это булевой тип, значит значения могут быть либо "0", либо "1". Выбираем 1 ( включить ). Таким образом, мы получили:
Давайте протестируем дробные числа. Адрес в памяти: "0xB7CB64", тип значения - float, размер ( size ) - "4" байта. Этот адрес отвечает за скорость игры. Давайте изменим её:
Естественно, в место значений можно использовать переменные. Запись мы рассмотрели. Давайте попробуем считать значение, что находится по адресу. Для примера возьмём тот же адрес скорости игры:
Теперь давайте напишем скрипт, который при нажатии клавиши 4` включался/выключался бесконечный бег и изменялась скорость игры:
Обратите внимание на цикл while true. Если есть такая запись, значит цикл будет выполняться бесконечно ( точнее не будет завершаться, пока его не прервут ). Его очень часто используют в скриптеры и, надеюсь, в скорем будущем и вы тоже присоединитесь ;)
Тест в игре показал, что всё работает как ожидалось. На следующих уроках о адресах памяти мы рассмотрим динамические адреса.|3462|1|0||rabota_s_igrovoj_pamjatju_chast_1_statichnye_adresa|1499597654
Last updated