Я знаю, что, например, push eax сохранит eax в стеке и уменьшит esp на 4. И push dword ptr означает, что ему нужно нажать 4 байта, но тогда я смущен. Кроме того, если бы это было [esi + 22], это было бы одно и то же?Что означает push dword ptr [eax + 22]?
0
A
ответ
5
push
инструкция, так же, как и многие другие инструкции x86, может принимать различные операндами: непосредственные значения, регистров и адресов памяти:
push 10 ; pushes the value 10 (32 bits in 32-bit mode)
push eax ; pushes the contents of the 32-bit register eax
push DWORD [ebx + 42] ; pushes 32 bits from the memory location ebx + 42
Форма регистра выводит размер от размера регистра , Форма памяти должна иметь указанный размер (например, здесь показано в синтаксисе Intel). Для немедленных значений размер операнда равен 16 или 32 бит; текущий режим по умолчанию, а другой размер может быть явно выбран (например, push WORD 10
в 32-битном режиме).
0
push dword ptr [eax+22]
уменьшит esp
на 4, а затем сохранит 4 байта данных из памяти ebx + 22
. и pop eax
делать в обратном порядке, сначала переместите биты storeed в esp
к esp + 3
к eax
, и приращение esp
на 4.
Смежные вопросы
- 1. Что делает mov eax, dword ptr [eax]?
- 2. Что означает cmp DWORD PTR и mov DWORD PTR?
- 3. Что означает `dword ptr`?
- 4. Что делает eax после mov eax, dword ptr [edi]
- 5. Что означает MOV EAX, DWORD PTR DS: [ESI] означает и что он делает?
- 6. Что делает MOV EAX, DWORD PTR DS: [ESI + EBP * 8]?
- 7. DWORD путаница использование PTR
- 8. Что такое mov dword ptr [rsp], eax ss: 00000000`0011ddc0 = 00000060 означает?
- 9. Что означает эта разборка?
- 10. "mov eax, dword ptr fs: loc_12 + 6" Какое значение присвоено eax?
- 11. Что означает strcpy в сборке?
- 12. imul using DWORD PTR [reg + reg * nn]
- 13. Что означает movl $ _start,% eax?
- 14. sub eax, 0 - он что-нибудь делает?
- 15. Что означает cmp% eax, 0x80498d4 (,% ebx, 4)?
- 16. Является ли "MOV DWORD PTR DS: [ECX], ECX" эквивалентно "MOV DWORD PTR DS: ECX, ECX"
- 17. Что PTR sub_xxxxx значит
- 18. GCC Инлайн-монтаж: вызов DWORD PTR
- 19. Что означает эта линия ASM?
- 20. Что означает Push -67?
- 21. Что означает «PUSH 0xFFFFFFFF» в прологе функции?
- 22. Что означает это объявление: «int (* ptr [3])();»?
- 23. C99: Что означает «int const * ptr»?
- 24. Linux x86 NASM - Подпрограмма: Печать dword из EAX
- 25. Что означает этот профиль оптимизации цикла?
- 26. Собрание Слово PTR означает
- 27. C - (ptr = = & ptr) Что такое * ptr?
- 28. Прочтите регистр eax
- 29. Различия между PUSH eax и mov [esp], eax?
- 30. C++ станд :: строка Параметр <Bad Ptr>
Это было быстро, благодаря Kerrek. Могу ли я спросить, правильно ли это, основываясь только на последней инструкции, читатель не знает, указывает ли он на ebp + или ebp? – Soap
Извините, я не совсем понимаю вопрос - кто это? Что вы подразумеваете под «читателем»? Чтение исходного кода или проверка стека? –
(И, пожалуйста, добавьте комментарий к ответу - таким образом я получаю уведомление. Я просто случайно увидел ваш комментарий на этот раз. Или добавьте маркер «@name».) –