Стек – неотъемлемая часть любого, работающего под управлением процессора х86, приложения. Он организован на аппаратном уровне и магнитом притягивает к себе как системных программистов, так и различного рода малварь. Переполнение стека – наиболее часто встречающейся программный баг, который влечёт за собой катастрофические для приложения последствия. Стек активно используют все WinAPI, так-что вызов любой системной функции при исчерпавшем себя стеке, порождает необрабатываемое исключение STACK_OVERFLOW с кодом 0xC00000FD.
Для адресации и работы с сегментом стека, в процессоры х86 была включена специальная регистровая пара SS:ESP (StackSegment –> StackPointer). Microsoft неохотно делится с тонкостями реализации, поскольку сама "слизала" его ещё с допотопной машины DEC-PDP и в своей документации нигде это даже не обозначила. Но оставим сей факт на их совести, ведь в чём-то мелкомягкие и правы – зачем изобретать велосипед, когда есть готовое и удовлетворяющее требованиям решение?
В данной статье стек рассматривается с технической стороны. Мы проведём некоторые эксперименты с ним (не путать с экскрементами), попытаемся расширить его под свои нужды, напишем несколько приложений и многое другое. Информацию приходилось собирать с различных источников, проверяя её на личном опыте. В качестве платформы будет выступать 32-битная Win-7.
Читать статью полностью, она большая :) https://codeby.net/threads/stek-obschaja-filosofija.70738/