Antonshka 27 Опубликовано 11 декабря, 2020 Привет всем! Кто-нибудь сталкивался с такою же странностью при дебагинге в СЕ как и я? Вот как она себя проявляет: Есть некая инструкция, работающая с координатами текстур. Я делаю на неё инжект, добавляя к имеющемуся вот такой вот код Спойлер //------------------ Так создалась переменная 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Xipho 117 Опубликовано 11 декабря, 2020 1 час назад, Antonshka сказал: Может быть есть какой-то иной независящий от брейкпоита поток игры, который использует эту же инструкцию? Он не может использовать те же регистры в то же время, когда ты по шагам отлаживаешься, ты находишься в контексте того потока, в котором сработал бряк. Контекст потоков при этом не переключается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Antonshka 27 Опубликовано 11 декабря, 2020 4 часа назад, Xipho сказал: Он не может использовать те же регистры в то же время, когда ты по шагам отлаживаешься, ты находишься в контексте того потока, в котором сработал бряк. Контекст потоков при этом не переключается. Регистры да, не меняются. Вот как это выглядит Спойлер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hack 14 Опубликовано 11 декабря, 2020 Обрати внимание на заголовок отладчика, там два потока 938 и 231C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Antonshka 27 Опубликовано 11 декабря, 2020 2 часа назад, Hack сказал: Обрати внимание на заголовок отладчика, там два потока 938 и 231C. Потока два, ага. Но в каждом из них происходит несвоевременная запись в переменную, как видно на видео. Вообще эту функцию вызывают 12 разных вызовов, судя по тому что показывает Ghidra. Но разве может один вызов заместить другой, пока тот еще в процессе выполнения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты