2010-10-04 2 views

ответ

21

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 Необычный в том, что движущиеся стекы стека обычно включают указатель на стек и указатель базы, но обычно это просто поднимается на один уровень (то есть, возвращается от функции).

Для типа кода, показанного выше, где вы хотите перемещаться по нескольким уровням, скорее всего, просто используйте указатель стека, пока не получите то место, где вам нужно, а затем вытащите базовый указатель (часто вызывать условные обозначения нажимайте текущий указатель базы перед его заменой, чтобы простой поп восстановил старое значение).

+0

Это, безусловно, 64-разрядный, поскольку регистр RSP существует только в 64-битных (на IA32-архитектурах, и я не помню еще одну архитектуру, использующую RSP). Анализ его цели также звучит разумно. – Zooba

9

Это 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.

 Смежные вопросы

  • Нет связанных вопросов^_^