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