Работа с памятью: UN:C
(by Д'якон)

Немного теории

!!UN:C – ресивер, позволяющий как записывать, так и считывать данные по определённому адресу.
Итак, для работы с данным ресивером Вам потребуется ArtMoney и Герои3.

Адреса бывают статические и динамические.
Статические адреса - это адреса ехе файла, т.е. 00401000…006АСЕС0 и 00701000…0293512С.
Динамические адреса – выделяются программой во время загрузки.
Возможно совпадение динамических адресов в разных версиях героев (TE и WoG), а также на разных компьютерах, но лучше всё же привязывать динамические адреса к статическим - привязку можно делать через указатели (они так же бывают динамические и статические).
Всё это будет рассмотрено ниже. Пока просто можете запомнить.

Что искать и как?
На эту тему приведено масса примеров в руководстве к АртМани (поэтому начинать нужно с чтения данного руководства).
Памятка: лучшим прерыванием процесса является команда !!IF:M^^; (дальше поясню… Вообще, с использованием ERM поиск значительно облегчается)

Что ж, я приведу пару практических примеров.
Начнём с простенького.

Задача 1: найти адрес, содержащий ресурс "золото".

Данная задача является наиболее простой. Ресурс отображается в определённом значении, значит и искать мы будем "точное значение".
Создайте карту для экспериментов, где Вам не будут мешать противники. (не обязательно, но желательно). Запустите игру. Запустите Вашу карту (у Вас должен быть хотя бы замок, либо золотая шахта - для того, чтобы золото меняло значение). Запомните значение ресурса. Нажмите Alt+Tab. Запустите АртМани.

  1. Выберите процесс:
  2. Нажмите на кнопку искать. И выберите: "точное значение" , введите кол-во золота, и выберите "Целые (стандартные)" (к последнему и следующим пунктам в меню поиска ещё вернёмся).


  3. Нажимаем ОК. В левом поле отобразятся все найденные адреса с заданным значением. В моём случае при значении золота 20000 - 542 адреса.
  4. Нажимаем Alt+Tab. Возвращаемся в игру и пропускаем ход. Золото увеличилось (у меня 20500).
  5. Alt+Tab. Нажимаем на кнопку "Отсеять". И вводим в поле новое значение золота. Нажимаем ОК. Остался 1 адрес. Это и есть адрес, по которому содержится значение золото. Значение целое - 4 байта. Т.е. при использовании UN:C записываем или считываем 4 байта. Полученный адрес - в 16-чной системе исчисления, переводим в 10ричную (можно при помощи стандартного калькулятора Windows), для записи в UN:C.


Вывод: определится с целью поиска, постараться чтобы в игре изменялся только этот параметр.

Ну вот, с первым примером закончили.

Задача2: найти адрес содержащий стоимость постройки в городе.

Сложность данной задачи заключается в том, что стоимость постройки есть константа.

  1. Запускаем Героев. Запускаем АртМани. (В данном примере возьмём Конфлюкс).
  2. Цену лучше искать по золоту, т.к. получаем меньше адресов. Поиск по другим ресурсам даст более 30000 адресов, что не очень удобно.
  3. Итак. Смотрим стоимость первого, допустим, жилища - 300 золота и по 5 дерева и руды. В поиске выбираем: "точное значение", "300", "Целые (стандартные)". Выполняем поиск. Найдено 376 адресов.
  4. Добавляем все адреса в правое поле. Если адресов больше тысячи, то нужно изменить значение отображаемых адресов в правом поле. Данная опция находится в меню "искать", в "настройках" в закладке "дополнительные". И перезапустить АртМани.

  5. Т.к. адресов в данном случае не более 376, то выставлять данную опцию не следует (а вообще, рекомендую поставить сразу тысяч на 8-10 для удобства).
  6. После добавления адресов в правое поле выбираем следующее: "изменить" - "выбрать всё". Далее в контекстном меню выделенных адресов выбираем "установить значение" 1 с шагом 1. Можете увидеть, как становились значения в адресах. Далее заходим в игру и смотрим цену жилища. Цена в золоте 85. Находим адрес со значением 85 - это и будет наш искомый адрес 06АА4D8. Для того, чтобы найти адреса дерева и руды войдём в меню адреса, двойной щелчок на адресе и при помощи скроллинга стрелками вниз (т.е. на уменьшение адреса) будем искать необходимые значения, т.е. 5 и 5. Можно заметить, что ресурсы между собой находятся на смещении равном 4. Соответственно, дерево находится на смешении 24 от золота 06АА4С0. В этом легко убедиться, вычтя из адреса золота адрес дерева и переведя в 10-чную систему исчисления.






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