Но в ABI говорится, что rsp должен быть кратным 16 при входе в программу
_start
не является функцией. Он не call
ничем не редактируется, в стеке нет адреса возврата (только argc
и фактические массивы argv[]
и envp[]
).
Да, при запись процесса RSP уже выровнен на 16 байтов, готов к вызову функции.
Я снова отредактировал ответ Шута на вопрос, который вы связали, чтобы прояснить его.
16-байтовое выравнивание перед a call
является требованием. Вы возвращаетесь к этому со смещением 16 * n + 8
внутри вашей функции перед другим вызовом, включая любые push
es.