我是一名新手汇编语言学习者,然后我发现了这个文章。
它说这段代码:
根据视频,要访问基指针上方的堆栈值,我们应该加上。如果在指针下方,则应该减去。以上面的示例为例,他们从基指针中减去了一些内容,以移动所需变量的位置,这与视频中所述相反。
我错过了什么?我知道sub esp, 12是为本地变量分配空间,所以我想到EBP在该分配下方,因此我认为它应该是[ebp + something]而不是减去。
因此,当他执行sub esp, 12时,堆栈看起来像这样。
文章错了还是我理解有误?
它说这段代码:
void MyFunction()
{
int a, b, c;
a = 10;
b = 5;
c = 2;
等同于此
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
根据视频,要访问基指针上方的堆栈值,我们应该加上。如果在指针下方,则应该减去。以上面的示例为例,他们从基指针中减去了一些内容,以移动所需变量的位置,这与视频中所述相反。
我错过了什么?我知道sub esp, 12是为本地变量分配空间,所以我想到EBP在该分配下方,因此我认为它应该是[ebp + something]而不是减去。
因此,当他执行sub esp, 12时,堆栈看起来像这样。
ESP is here
| 2 | Ebp + 12
| 5 | Ebp + 8
| 4 | Ebp + 4
| | Old EBP value
文章错了还是我理解有误?