Biorąc pod uwagę ten kawałek kodu:bazowy wskaźnik i wskaźnik stosu
swap:
push ebp ; back up the base pointer,
mov ebp, esp
; push the context of the registers on the stack
push eax
push ebx
push ecx
push edx
mov eax, [ebp+8] ; address of the first parameter
mov ebx, [ebp+12] ; address of the second parameter
mov dl, [eax]
mov cl, [ebx]
mov [eax], cl
mov [ebx], dl
; restore the context of the registers from the stack
pop edx
pop ecx
pop ebx
pop eax
; restore the ebp
pop ebp
ret
(To jest właśnie metoda Wcześniej pchnął pierwszy i drugi parametr na stosie.).
Moje pytanie brzmi: dlaczego dodajemy 8 do wskaźnika podstawowego, aby uzyskać adres pierwszego parametru, a następnie 12?
Dostaję fakt, że są dword, więc każdy z nich ma 4 bajty, a więc od ebp + 8 do ebp + 12 robi sens. Ale dlaczego pierwszym jest ebp + 8? Ponieważ ESP wskazuje na GÓRĘ stosu, mov ebp, esp oznacza, że EBP wskazuje na GÓRĘ stosu. Następnie wciskamy 4 wartości na stosie: eax, ebx, ecx i edx. Dlaczego EBP + 8 wskazuje na pierwszy parametr?
+1 - Prosty, czysty i pełen informacji. – Cyclonecode
Wow całkiem czysty! Dzięki temu było to bardzo pomocne! Sądzę, że kluczowym punktem było to, że stos rośnie w dół! Dobrze wiedzieć ! Zrobiłeś mój dzień. – yhcowboy