я читал какой-то код и не был уверен, что эта линия делаетMOVQ функция сборки
movq (%rsp), %rsp
Благодарности
я читал какой-то код и не был уверен, что эта линия делаетMOVQ функция сборки
movq (%rsp), %rsp
Благодарности
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 ...
Возможно, это может быть не кодовый код стека, но это необычно, поскольку он будет подчинять указатель стека тем, для чего он обычно не используется.
Это is Необычный в том, что движущиеся стекы стека обычно включают указатель на стек и указатель базы, но обычно это просто поднимается на один уровень (то есть, возвращается от функции).
Для типа кода, показанного выше, где вы хотите перемещаться по нескольким уровням, скорее всего, просто используйте указатель стека, пока не получите то место, где вам нужно, а затем вытащите базовый указатель (часто вызывать условные обозначения нажимайте текущий указатель базы перед его заменой, чтобы простой поп восстановил старое значение).
Это 64-битное значение mov. Его 64-битный из-за «q» в movq, который представляет собой квад и квад, составляет 64 бит.
Может быть другой пример, такой как movl, в котором l 32 бит.
, но в случае MOVQ (% RSP),% RSP с использованием синтаксиса ATT ..
MOVQ (% RSP),% RSP -> MOVQ называется опкод, (% RSP) называется источник или src и% rsp называется пунктом назначения или dst.
Что он делает, так это то, что он смотрит в регистре.% Rsp получает свое значение и переходит в память [скобка «()» означает «переходить в память») этого значения, а затем присваивает ее% rsp.
Хотя оба являются одинаковыми регистром, разница в том, что изменяется значение% rsp.
EG: позволяет сказать, что% RSP имеет значение 22. Но память% РСП 30.
Используя эту инструкцию MOVQ (% РСП),% RSP
новое значение% РСП составляет 30 Опять же, потому что (% rsp) получает значение% rsp, которое принимает 22, а затем (% rsp) переходит к значению памяти 30, а затем присваивает его% rsp для адресата, который сам является% rsp.
Это, безусловно, 64-разрядный, поскольку регистр RSP существует только в 64-битных (на IA32-архитектурах, и я не помню еще одну архитектуру, использующую RSP). Анализ его цели также звучит разумно. – Zooba