Получить значение переменной из стека - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь понять, как работает стек внутри.

Я достаточно хорошо понимаю, что такое стек, что такое куча и как они сравниваются. На данный момент меня не интересует, как стек используется при вызове другой функции и последующем возврате из этой функции.

Я хочу знать, как локальные переменные хранятся в стеке и как они извлекаются.

Таким образом, стек представляет собой массив байтов. Также где-то должно храниться значение, которое отслеживает текущую позицию в стеке. Я не знаю, где это хранится или как это называется, но давайте пока назовем это POS.

Я начинаю чистую с пустого стека и POS = 0.

Я объявляю переменную A как 16-битное целое число и присваивают значение 5. Теперь первые 2 байта стека заняты, они содержат значение 5 и POS = 2.

Я объявляю переменную B как массив длины A из 16 битовые целые числа. Теперь следующие 10 байтов стека также заняты, они содержат массив длиной 5, где каждый элемент в массиве имеет длину 2, а POS = 12.

Я объявляю переменную C как 32-битное целое и присваивают значение 0. Теперь следующие 4 байта стека тоже заняты и POS = 16.

Я объявляю переменную D как 16-битное целое, а теперь POS = 18.

На данный момент я хочу вывести значение C. Когда мы смотрим на инструкции на ассемблере, как программа узнает, какие 4 байта следует прочитать из стека? Откуда он знает, что C начинается с позиции 12?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...