Como posso determinar o endereço de retorno na pilha?
Eu sei que se eu estiver dentro de alguma funçãofoo()
que é chamado em algum lugar debar()
função, então este endereço de retorno é empurrado na pilha.
#include <stdio.h>
void foo()
{
unsigned int x;
printf("inside foo %x\n", &x);
}
int main()
{
foo();
printf("in main\n");
return 0;
}
No código acima, eu obterei o endereço da primeira variável local empurrada na pilha quando a função foo estiver ativa. Como posso acessar o endereço de retorno (principal chamado foo) que é empurrado para algum lugar antes dessa variável na pilha? Essa localização é fixa e pode ser acessada em relação à primeira variável local? Como posso modificá-lo?
EDIT: Meu ambiente é Ubuntu 9.04 no processador x86 com o compilador gcc.