EXPLOIT
Resenha: EXPLOIT. Pesquise 862.000+ trabalhos acadêmicosPor: IRPJ • 29/6/2014 • Resenha • 315 Palavras (2 Páginas) • 247 Visualizações
Dependendo da implementação, a pilha pode crescer em direção aos endereços
altos ou baixos. O ponteiro de pilha também é de implementação dependente,
podendo apontar para o último endereço ocupado na pilha ou para o próximo
endereço livre. Como o texto trata da arquitetura Intel x86, iremos utilizar uma pilha
que cresce para os endereços baixos, com o ponteiro de pilha (registrador ESP)
apontando para o último endereço da pilha.
Além de um ponteiro de pilha, também é conveniente contar com um "ponteiro de
frame" (FP) que aponta para um endereço fixo no frame. A princípio, variáveis locais
podem ser referenciadas fornecendo-se seus deslocamentos em relação ao
ponteiro de pilha. Entretanto, quando palavras são inseridas e retiradas da pilha,
estes deslocamentos mudam. Apesar de em alguns casos o compilador poder
corrigir os deslocamentos observando o número de palavras na pilha, essa gerência
é cara. O acesso a variáveis locais a distâncias conhecidas do ponteiro de pilha
também iria requerer múltiplas instruções. Desta forma, a maioria dos compiladores
utiliza um segundo registrador que aponta para o topo da pilha no início da
execução da função, para referenciar tanto variáveis locais como parâmetros, já que
suas distâncias não se alteram em relação a este endereço com chamadas a PUSH
e POP. Na arquitetura Intel x86, o registrador EBP é utilizado para esse propósito.
Por causa da disciplina de crescimento da pilha, parâmetros reais têm
deslocamentos positivos e variáveis locais têm deslocamentos negativos a partir de
FP.
A primeira instrução que um procedimento deve executar quando chamado é salvar
o FP anterior, para que possa ser restaurado ao fim da execução. A função então
copia o registrador de ponteiro de pilha para FP para criar o novo ponteiro de frame
e ajusta o ponteiro de pilha para reservar espaço para as variáveis locais. Este
código é chamado de prólogo da função. Ao fim da execução, a pilha deve ser
restaurada e a execução deve retomar na instrução seguinte à de chamada da
função, o que chamamos de epílogo. As instruções CALL, LEAVE e RET nas
...