Ответ 1
movq
(предполагая, что вы говорите о x86) является перемещением квадратного слова (64-битное значение). Эта конкретная инструкция:
movq (%rsp), %rsp
выглядит очень похоже на код, который будет проходить через стек кадров. Эта конкретная инструкция захватывает квадрат, на который указывает текущий указатель стека, и загружает его в указатель стека, перезаписывая его.
В качестве примера эта последовательность кода (на основе реального кода и в Intel, а не в формате AT & T) будет непрерывно загружать указатель стека из его содержимого до тех пор, пока значение 16 байтов не будет равно 0.
576 cmpq [rsp+0x10],0x0
582 jz 594
588 movq rsp,[rsp]
592 jmp 576
594 ...
Возможно, это может быть не кодовый код стека, но он необычен, поскольку он будет подчинять указатель стека тем, для чего он обычно не используется.
Необычно, что в движущихся кадрах стека обычно используются указатель на стек и указатель на базовый указатель, но обычно это просто поднимается на один уровень (т.е. возвращается от функции).
Для типа кода, показанного выше, где вы хотите переместиться на несколько уровней, скорее всего, просто используйте указатель стека, пока не получите то место, где вам нужно быть, а затем отпустите базовый указатель (вызовы условностей будут часто толкать текущий базовый указатель перед его изменением, чтобы простой поп восстановил старое значение).