Я все еще изучаю сборку и C, но теперь я пытаюсь понять, как работает компилятор. У меня здесь есть простой код:Отладка программы C (int declaration)
int sub()
{
return 0xBEEF;
}
main()
{
int a=10;
sub();
}
Теперь я знаю уже, как работает процессор, прыжки в рамки и подпрограммами и т.д. Что я не понимаю, где программа «магазин» их локальные переменные. В этом случае в главном кадре?
Здесь основной кадр на отладчик:
0x080483f6 <+0>: push %ebp
0x080483f7 <+1>: mov %esp,%ebp
0x080483f9 <+3>: sub $0x10,%esp
=> 0x080483fc <+6>: movl $0xa,-0x4(%ebp)
0x08048403 <+13>: call 0x80483ec <sub>
0x08048408 <+18>: leave
0x08048409 <+19>: ret
я в "Int А = 10;" точка перерыва, поэтому смещение 6 имеет стрелку. Таким образом, функция главного начинается, как и другие толкая EBP-бла-бла-бла, и тогда я не понимаю:
0x080483f9 <+3>: sub $0x10,%esp => 0x080483fc <+6>: movl $0xa,-0x4(%ebp)
почему делает суб в особ? - переменная 'a' в стеке со смещением -0x4 указателя стека?
просто очистить идеи здесь: D
Спасибо заранее!
Просто из любопытства вы используете gcc? Если да, то какая версия? – BlackBear
gcc версия 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) – int3