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