Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотра
    15 642

Обновление2. Ветвления кода связанные с адресом


MasterGH

1 268 просмотров

 

 

 

 

Репозиторий

 

1. На адрес устанавливается брейкпоинт.

2. Идем в игру делаем или не делаем что-то

3. Начинают срабатывать инструкции на брейкпоинте

4. От каждой инструкции начинается трейслог, подобный тому, который есть у CE, но менее тормозной

5. Заканчивается трейслог на инструкции, на 100-ом счетчике после ret-а (об этом пункте будет уточнение). Здесь выходим на коневой цикл

6. Трейслог останавливается и ожидание следующей инструкции, которая сработает на брейкпоинте, она должна быть отличной

 

В итоге мы имеем кучу трейслогов начинающихся с адреса работающего с параметром (например, кол-во патронов в обойме) и заканчивающихся на корневом цикле. Также мы собираем данные об адресах с рет-ами и счетчиками.

По этим данным можно нарисовать схему, где ret-ы меняют направление пути прохождения потоком дизассемблерного кода

 

На скриншотах ниже

Вертикальные линии со кружками -— это ветвь трейслога

Белый кружок — адрес ret-a, который не повторялся

Пунктирный кружок — адрес ret-а, который повторялся. Стрелка от такого пунктирного круга будет указывать на белый круг.

 

По схеме видим, где ret-ы меняют свое направление поднимаясь по рутине в корневом цикле

 

Скрытый текст

58d0f882191d7_3.thumb.png.2ce4db8a90f2e7

Рис.1 Пока лучший вариант

 

Скрытый текст

58d0f88be41db_2.thumb.png.074c6f7d489514

Рис.2 Нижняя линия лишняя

 

Скрытый текст

58d0f88d82aa0_1.thumb.png.b03461debbcda8

Рис.3 Нижняя линия лишняя

 

По плану по визуальной части:

1. Клик на кружок — переход на код

2. Придумать что-то, чтобы стрелки не накладывались друг на друга

3. Установка брейкпоинтов на кружках — становиться красными

4. Легенда. Номер ветви, связанная инструкция, состояние брейкпоинтов. Комментарий к ветви

5. Загрузка/сохранение легенды

 

Для чего нужно. Для поиска условий, которые включают и выключают ветви кода. Т.е. чтобы можно было это условие быстро найти и изменив его, повторить выполнение кода ветви, которая "пробьётся" из корневого цикла. Таким образом попытаться повторить действие в игре, а если не получаться повторить, то определить дополнительные условия.

2 Комментария


Рекомендуемые комментарии

интересная задумка

я вот трейсы как то в 10000 сравнивал ....

вручную)

кстати мне иногда было не понятно

или это баг или что, но трейс в окне не правильно дерево бывало рисовал

т.е. сравниваешь а там после ret он не туда вернулся, оказалось он дерево не правильно построил и вызов CriticalSecion записал как текущий код

и еще было что возврат выполняется но возвращается не после места вызова, это я вообще не понял почему

Ссылка на комментарий

Могут быть любые баги в больших трейслогах, критических секциях, со множеством потоков. Тут нужно смотреть и отдавать в багрепорт Дарк Байту. Пока остается пользоваться тем что есть.

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.