Stack
O que é a Stack
A pilha, ou Stack em Inglês, é uma região de memória contínua alocada no início da execução da aplicação, mais especificamente no início da thread. Essa região é usada para armazenar os dados necessários para a execução de blocos de código, é nela que são salvas as variáveis declaradas, endereços de retornos de funções e parâmetros, sendo que esse último é salvo somente em arquiteturas 32-bits.
Seu gerenciamento normalmente é feito por meio de um ponteiro que sempre irá apontar para o topo, normalmente salvo pelo registrador sp (stack pointer). Dessa forma, toda vez que se deseja salvar algo na pilha o sp é movimentado (criando um "espaço" nela), e quando algo deixa de ser usado, como o escopo de uma função após o seu término, o sp é movimentado na direção oposta. Todo esse gerenciamento da stack é feito pelo compilador, mas em linguagens como assembly é responsabilidade do programador gerenciar isso.
Funcionamento
Seu funcionamento é baseado no princípio FIFO (First In First Out), pois como citado anteriormente o gerenciamento da Stack é feito por meio do incremento e decremento do registrador sp. Além disso não há muito o que comentar por agora, seu detalhamento será feito junto com as explicações dos exploits existentes para essa região.
Atualizado