C ++
int main(void)
{
int a = 3;
int b = 10;
int c;
c = a + b;
return 0;
}
008C1353 sub esp,0E4h
......
008C135C lea edi,[ebp+FFFFFF1Ch]
008C1362 mov ecx,39h
008C1367 mov eax,0CCCCCCCCh
008C136C rep stos dword ptr es:[edi]
3: int a = 3;
008C136E mov dword ptr [ebp-8],3
4: int b = 10;
008C1375 mov dword ptr [ebp-14h],0Ah
5: int c;
6: c = a + b;
Несколько вещей, которые я не понимаю.
(1) G ++ будет иметь выравнивание стека 16 байтов, а выполнение в Visual Studio составляет 228 байтов??
(2) Делая это в Windows, стек растет вверх или вниз?Я сбит с толку.Я знаю, как должен выглядеть стек
[Parameter n ]
...
[Parameter 2 ]
[Parameter 1 ]
[Return Address ] 0x002CF744
[Previous EBP ] 0x002CF740 (current ebp)
[Local Variables ]
Так будет ли младший адрес нисходящим?
(3) Когда мы помещаем переменную a в стек, это ebp - 8Почему же это восемь байтов?(4) Точно так же, почему int b ebp - 14?
Может кто-нибудь объяснить мне это?(-4, -8 соответственно)
Используя GDB, смещение имеет для меня больший смысл.
Спасибо.