私はアセンブリが初めてで、この記事に出くわしました
このコードは
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 + 何か] である必要があると考えています。
彼がこのサブ esp 12 を実行したとき、スタックは次のようになります。
ESP is here
| 2 | Ebp + 12
| 5 | Ebp + 8
| 4 | Ebp + 4
| | Old EBP value
記事が間違っていたのですか、それとも私が解釈を誤ったのでしょうか?