Тестирую я радостный на gta3 плагин. Нашел кучу интересных адресов настроек. И силу прыжка, и скоростей Velocity, и id земли на которой стоим и id глобального события (если его переключить, то ты либо в полете, либо арестован либо еще что-то). И тут я увидел что капитально на многих адресах поехали смещения в структуре. В пределах 1-4 байт.
И как я понял дело в скорости срабатывания адресов и таймера ожидания перехода аппаратного бряка на следующий байт в структуре до её размера.
Представим себе 4-х байтовое значение
Начало структуры:
+00: xx xx xx xx
+04: xx xx xx xx
1. На первом байте не успели сработать инструкции.
2. На втором байте не успели сработать инструкции.
3. На третьем байте наконец сработали и увидели опкод.Опкод распарсили. Получили размер в 4 байта
4. На третьем байте на два байта смещение +00 убежало вперед в смещение +02.
Примерно такая картина
Начало структуры:
+02: [xx xx] xx xx
.... и там много что поехало, а некоторые смещения не поехали
Окей. Я могу быстро вычислить адрес в скобках [eax+смещение] и даже всякие repe повторы обработать, но как только вот такая штука попадается mov eax, [eax+смещение] или вот такая mov eax, [eax*4+смещение], то eax уже успеет перезаписаться, ведь на данных стоит аппаратный бряк, а он работает после выполнения инструкции.
1) На смещении нужно постоять и подождать других инструкций и если N времени таких нет, то надо мне подумать, как быть дальше.
2) В принципе я могу и не ждать снять аппартный бряк с адреса в структуре и поставить не аппаратный бряк уже на инструкцию и получить eax до инструкции., а не после как при аппаратном.
И тут еще один нюанс, на [eax+смещение], не тот адрес, а какой-то соседний или вообще дальний. Похоже надо оставлять оба бряка и аппаратный на смещении структуры и не аппаратный на инструкции. Сохранять данные не аппаратного постоянно, как только сработает аппаратный посмотреть последний данные не аппаратного и с ними работать.
В общем буду думать как это все упростить и чтобы стабильно работало.
Еще есть такая штука jumps и calls на адрес инструкции, там тоже может быть ситуация...