Алоподтолкнуть локальные переменные
После того как я прочитал о функции и стек из http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames У меня есть вопрос о локальных переменных.
Снимок из статьи:
push ebp ; save the value of ebp
mov ebp, esp ; ebp now points to the top of the stack
sub esp, 12 ; space allocated on the stack for the local variables
Это означает, что локальные переменные могут быть доступны с помощью ссылки EBP. Рассмотрим следующий фрагмент кода C и соответствующий код сборки:
a = 10;
b = 5;
c = 2;
mov [ebp - 4], 10 ; location of variable a
mov [ebp - 8], 5 ; location of b
mov [ebp - 12], 2 ; location of c
Помните, что толкая в основном делает это:
sub esp, 4 ; "allocate" space for the new stack item
mov [esp], X ; put new stack item value X in
Почему локальные переменные не толкают в стек, как это:
push 10
push 5
push 2
вместо
sub esp, 12
mov [ebp - 4], 10 ; location of variable a
mov [ebp - 8], 5 ; location of b
mov [ebp - 12], 2 ; location of c
Вы можете делать это по путям, но будьте осторожны о том, чтобы навести порядок! – 2010-11-29 21:23:11
Является ли sub esp, 4 - mov [esp], 10 не равным mov [ebp-4], 10? – chitech 2010-11-29 21:55:39