I'm new to assembly and then I came across this article
he says this code
void MyFunction() { int a, b, c; a = 10; b = 5; c = 2;
equivalent to this
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 mov [ebp - 4], 10 ; location of variable a mov [ebp - 8], 5 ; location of b mov [ebp - 12], 2 ; location of c
According to this video , in order to access the stack value above the base pointer, we must add. If it is below the pointer, we must subtract it. Based on this example above, they subtracted something from the base pointer to move the location of the necessary variables, which contradicts what is indicated in the video.
What did I miss? I know that sub esp, 12 allocates space for local variables, so I mean that EBP is lower than this distribution, so I think it should be [ebp + something] not minus.
So, when he did this sub esp, 12, this is what Stack looks like.
ESP is here | 2 | Ebp + 12 | 5 | Ebp + 8 | 4 | Ebp + 4 | | Old EBP value
Was this article wrong or did I misunderstand it?
source share