запись значения в регистр

Lance_Sterling

Известный
Автор темы
999
355
Мне нужно записать значение 0x10E00 в инструкцию MOV W0, #imm, чтобы увеличить размер структуры
Но 0x10E00 — это больше чем 16 бит, и поэтому не помещается в одну инструкцию MOVZ без сдвига.
Чтобы корректно записать его в W0, нужно две инструкции (MOVZ и MOVK), то есть 8 байт кода
Но если я запишу 8 байт, я затру следующую инструкцию, которая нужна для создания пула

Что делать в такой ситуации?
1749310940377.png
 
Решение
я сам с арм64 не сталкивался, но обычно в рантайме патчат, ставя джамп хук тот же - копируешь ориг инструкции в заранее выделенное место, добавляешь туда еще свою инструкцию, и прыгаешь обратно, тем самым ничего не затирая

DarkPhantom

Участник
13
10
Мне нужно записать значение 0x10E00 в инструкцию MOV W0, #imm, чтобы увеличить размер структуры
Но 0x10E00 — это больше чем 16 бит, и поэтому не помещается в одну инструкцию MOVZ без сдвига.
Чтобы корректно записать его в W0, нужно две инструкции (MOVZ и MOVK), то есть 8 байт кода
Но если я запишу 8 байт, я затру следующую инструкцию, которая нужна для создания пула

Что делать в такой ситуации?
Посмотреть вложение 271798
Попробуй использовать adrp для загрузки базового адреса , а затем add , что бы добавить нужное смещение .

Попробуй использовать adrp для загрузки базового адреса , а затем add , что бы добавить нужное смещение .
Ну это единственное, что пришло в голову
 
  • Вау
Реакции: Lance_Sterling

Lance_Sterling

Известный
Автор темы
999
355
Попробуй использовать adrp для загрузки базового адреса , а затем add , что бы добавить нужное смещение .


Ну это единственное, что пришло в голову
все равно ведь используем две инструкции, получается 8 байт, а мне надо 4
 

moreveal

Известный
Модератор
947
667
я сам с арм64 не сталкивался, но обычно в рантайме патчат, ставя джамп хук тот же - копируешь ориг инструкции в заранее выделенное место, добавляешь туда еще свою инструкцию, и прыгаешь обратно, тем самым ничего не затирая
 
  • Нравится
Реакции: Lance_Sterling

Lance_Sterling

Известный
Автор темы
999
355
я сам с арм64 не сталкивался, но обычно в рантайме патчат, ставя джамп хук тот же - копируешь ориг инструкции в заранее выделенное место, добавляешь туда еще свою инструкцию, и прыгаешь обратно, тем самым ничего не затирая
дай пример jmp хука на arm64, если есть, с копированием ориг инструкций (как в kthook)