Перейти к содержанию

Странности при дебагинге в СЕ


Antonshka

Рекомендуемые сообщения

Привет всем!

Кто-нибудь сталкивался с такою же странностью при дебагинге в СЕ как и я?

 

Вот как она себя проявляет:

Есть некая инструкция, работающая с координатами текстур.  Я делаю на неё инжект, добавляя к имеющемуся вот такой вот код

Спойлер

//------------------ Так создалась переменная
alloc(Alloc_Address_1,100)
registersymbol(Alloc_Address_1)

  
//------------------ Оригинальные инструкции
movdqu [rcx],xmm0
movups xmm1,[rax+10]
//------------------ Инструкции добавленное мною
push r9
push r10
mov r9,[rcx]
mov r10,[rcx+20]
add r9,r10
mov [Alloc_Address_1],r9
pop r10
pop r9

 

затем ставлю брейкпоинт на инструкцию "movdqu [rcx],xmm0", и начинаю двигаться по коду, клавишей F7 (Step).

Иногда запись в "Alloc_Address_1" происходит своевременно, то есть сразу после шага "mov [Alloc_Address_1],r9". Но иногда, запись повторяется, например спустя один или два шага, на "pop r10" или "pop r9". Причем записывается уже совсем другое число.

 

Как такое возможно, если я двигаюсь пошагово? Может быть есть какой-то иной независящий от брейкпоита поток игры, который использует эту же инструкцию? Возможно он перезаписывает значение в адрес?

С другой стороны, как этот отдельный поток не перезаписывает значение постоянно, но только тогда, когда я делаю очередной шаг по F7.

Перезапись не сделается пока я не сделаю шаг, перезапись может произойти и выше "mov [Alloc_Address_1],r9", например "mov r9,[rcx]".

 

СЕ 7.2.Я пробовал и 7.0.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Antonshka сказал:

Может быть есть какой-то иной независящий от брейкпоита поток игры, который использует эту же инструкцию?

Он не может использовать те же регистры в то же время, когда ты по шагам отлаживаешься, ты находишься в контексте того потока, в котором сработал бряк. Контекст потоков при этом не переключается.

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Xipho сказал:

Он не может использовать те же регистры в то же время, когда ты по шагам отлаживаешься, ты находишься в контексте того потока, в котором сработал бряк. Контекст потоков при этом не переключается.

Регистры да, не меняются.

Вот как это выглядит

Спойлер

 

 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Hack сказал:

Обрати внимание на заголовок отладчика, там два потока 938 и 231C.

Потока два, ага. Но в каждом из них происходит несвоевременная запись в переменную, как видно на видео.

Вообще эту функцию вызывают 12 разных вызовов, судя по тому что показывает Ghidra. Но разве может один вызов заместить другой, пока тот еще в процессе выполнения.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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