push локальные переменные

Alo

После того, как я прочитал о функциях и стеке из 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


Почему локальные переменные не помещаются в стек следующим образом: 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


Почему локальные переменные не помещаются в стек следующим образом: 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

6
задан chitech 29 November 2010 в 20:56
поделиться