я играю с gcc -S
, чтобы понять, как работает память и стек. Во время этих спектаклей я обнаружил несколько неясных для меня вещей.Не могли бы вы помочь мне понять причины?
Когда вызывающая функция устанавливает аргументы для вызываемой, она использует mov
to esp
вместо push
. В чем преимущество не использования push
?
Функция, которая работает со своими аргументами, расположенными в стеке, указывает на них как ebp + (N + offset)
(где N — размер, зарезервированный для адреса возврата). Я ожидаю увидеть esp - offset
, что более понятно. В чем причина везде использовать ebp
как фундаментальную точку? Я знаю, что они равны, но все же?
Для чего эта магия в начале main
? Почему esp
нужно инициализировать только таким образом?
и особенно, 0xffffffff0
Спасибо,