Является ли это эквивалентом инструкции ret? - PullRequest
0 голосов
/ 23 мая 2018

Является ли 64-битная последовательность асм x86:

pop r11
jmp r11

... эквивалентной почти ret, за исключением того, что она перекрывает r11?

1 Ответ

0 голосов
/ 23 мая 2018

Как правило, ближний возврат C3 функционально эквивалентен pop reg, за которым следует скачок вида FF /4 reg (скачок вблизи абсолютного косвенного значения).Они оба помещают 64-битное значение вершины стека в RIP.Они также могут вызывать одинаковые исключения в одной и той же ситуации в 64-битном режиме.В частности, когда загрузка из стека происходит по неканоническому адресу, происходит #SS(0).Также, когда новое значение RIP относится к неканоническому адресу, происходит #GP(0).Более того, #PF и #AC(0) могут быть вызваны при любом доступе к памяти.Таким образом, если существует вероятность того, что может произойти одно из этих исключений, и если код, обрабатывающий исключение, может вести себя по-разному в зависимости от используемой последовательности команд, то они фактически не будут функционально эквивалентны, точнее говоря.Я предполагаю, что есть некоторый бесплатный GPR, такой как r11.В противном случае, если необходимо освободить регистр путем разлива его в память, такой процесс может оказать влияние на архитектурное состояние, которое не произошло бы при простом использовании C3.

...