Я сейчас изучаю стек (x86). Я знаю, что это куча данных, которая работает по принципу LIFO. Я знаю, что основными операциями в отношении стека являются push (для добавления значения в начало стека) и pop (для удаления значения). ESP - это ссылка на то, где мы сейчас находимся в стеке. Теперь, что я не понимаю:
Пример:
Push 4
Push ebx
Push eax
Приведенные выше инструкции сгенерируют стек следующим образом:
8 eax <-- ESP
4 ebx
0 4
Когда ESP указывает на последнюю добавленную стоимость eax.
Теперь, когда мы расширим эти инструкции с помощью операции pop, мы получим что-то вроде:
Push 4
Push ebx
Pop ebx
Push eax
Приведенные выше инструкции должны привести (если я прав) к следующему стеку (для первых трех инструкций):
4 (ebx)
0 4 <-- ESP
Ebx удаляется из стека, а ESP перемещается вниз на 4 бита. Теперь стек после выполнения всех инструкций:
4 eax <-- ESP
0 4
Я надеюсь, что все до здесь правильно, если не комментарии более чем приветствуются ;-)
Теперь для инструкции mov edx, [ebx, + 04], начиная с первого стека в этом посте. Является ли результатом этого следующее:
16 eax
8 edx <-- ESP
4 ebx
0 4
Он будет начинаться с ebx + 4 бита при записи edx, перемещая предыдущее значение (eax) в верхнюю часть, или он заменит eax на edx?
Второй вопрос (более общий), как инициировать, адресовать и удалять массивы в стеке.
Приношу свои извинения за этот длинный вопрос, но я хочу понять (основы) стека. Спасибо.