CE mapbranches
-
(Другие записи: https://celua.ru/topic/113/ветвления-кода-связанные-с-адресом-старые-записи/2)
- На адрес устанавливается брейкпоинт.
- Идем в игру делаем или не делаем что-то
- Начинают срабатывать инструкции на брейкпоинте
- От каждой инструкции начинается трейслог, подобный тому, который есть у CE, но менее тормозной
- Заканчивается трейслог на инструкции, на 100-ом счетчике после ret-а (об этом пункте будет уточнение). Здесь выходим на коневой цикл
- Трейслог останавливается и ожидание следующей инструкции, которая сработает на брейкпоинте, она должна быть отличной
В итоге мы имеем кучу трейслогов начинающихся с адреса работающего с параметром (например, кол-во патронов в обойме) и заканчивающихся на корневом цикле. Также мы собираем данные об адресах с рет-ами и счетчиками.
По этим данным можно нарисовать схему, где ret-ы меняют направление пути прохождения потоком дизассемблерного кода
На скриншотах ниже
Вертикальные линии со кружками -— это ветвь трейслога
Белый кружок — адрес ret-a, который не повторялся
Пунктирный кружок — адрес ret-а, который повторялся. Стрелка от такого пунктирного круга будет указывать на белый круг.По схеме видим, где ret-ы меняют свое направление поднимаясь по рутине в корневом цикле
По плану по визуальной части:
-
Клик на кружок — переход на код
-
Придумать что-то, чтобы стрелки не накладывались друг на друга
-
Установка брейкпоинтов на кружках — становиться красными
-
Легенда. Номер ветви, связанная инструкция, состояние брейкпоинтов. Комментарий к ветви
-
Загрузка/сохранение легенды
Для чего нужно. Для поиска условий, которые включают и выключают ветви кода. Т.е. чтобы можно было это условие быстро найти и изменив его, повторить выполнение кода ветви, которая "пробьётся" из корневого цикла. Таким образом попытаться повторить действие в игре, а если не получаться повторить, то определить дополнительные условия.