Перейти к содержанию
Авторизация  
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 сказал:

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

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

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

Спойлер

 

 

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Hack сказал:

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

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

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

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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