по правилам fastcall стек должен быть выровнен на 16 байт при вызове ф-ий, перед вызовом ф-ии резервируем место для теневой копии регистров sub rsp, 32 и еще sub rsp, 8 для выравнивания.
тоесть sub rsp, 8*5 должен идти перед вызовом каждой ф-ии в x64
Проверяю все в отладчике, во первых сразу же встает вопрос, почему стек при запуске программы не выровнен на 16 ? В моем случае стек при запуске программы 8FF28 что в десятичной системе 589608 и соответственно /16 = 36850.5
что не кратно 16 ?
Представь, что стек выровнен. Ты выполнил call, произошёл переход по адресу вызываемой функции. Как изменится стек?
Обсуждают сегодня