來到它說,這個代碼
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
根據這個video,要訪問基址指針上面的堆棧的值,我們應該添加。如果它低於指針,我們應該減去。考慮到上面的例子,他們從基指針中減去一些東西來移動所需變量的位置,這與視頻中所述的內容相反。
我錯過了什麼?我知道sub esp 12爲局部變量分配一個空間,所以我想到的是EBP低於這個分配,所以我認爲它應該是[ebp + something]而不是減去。
因此,當他做了這個亞esp,12,這是堆棧的樣子。
ESP is here
| 2 | Ebp + 12
| 5 | Ebp + 8
| 4 | Ebp + 4
| | Old EBP value
是文章錯誤,還是我誤拼了?
所以這是肯定地說,什麼是在視頻中提到是錯誤的?我已經掌握了Stack的概念,但是當我觀看視頻時,我感到困惑。根據視頻,要訪問基本指針以上的值或任何內容,您應該添加一些內容給EBP。要從基指針下訪問任何東西,我們應該從EBP中減去。 ?? –
我現在看不到視頻;假設「高於」意味着「遞減地址」,答案顯而易見:要訪問指針指向的「之前」(它位於「之上」)的內容,必須減少指針。反之,你必須增加它。 (在你的**中,從下面訪問任何東西的意義並不清楚...... **) – ShinTakezou
這很好。此外,除了視頻,我已閱讀的所有文章都說我需要這樣做[EBP - 無論如何]以獲得高於EBP的價值。謝謝。現在很清楚。 :d –