Сборка для стека переменного размера? - PullRequest
1 голос
/ 22 сентября 2019

Итак, я читаю CS: APP (книга основана на x86-64) и натолкнулся на упражнение о массивах переменного размера, которое подразумевает стеки переменного размера.Дается следующий код и выходные данные сборки (формат не позволяет мне копировать код): enter image description here и структура фрейма стека с этим кодом enter image description here

Несмотря на то, что я читал о выравнивании данных, различных арифметических операциях и т. Д., Эта сборка вызывает много вопросов - а именно:

  • Я получаю использование% rbp, чтобы указать набазовый адрес для возврата.Но почему в мире выделяют 16 байтов для переменной i, которая требует только 8 байтов?Я не понимаю, почему здесь необходимо выравнивание данных, если это является причиной
  • В строке 5 сборки это leaq 22(,%rdi,8), %rax - почему 22?Я получаю эту строку 6 округляет ее до ближайшего 16, но как это относится к 22?
  • Точно так же, в строках 8-10, почему leaq 7(%rsp), %rax?
  • Я не понимаю, почему тамможет потребоваться заполнение p и s2 на рисунке - это заполнение показано как e2 .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...