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.

questionAnswers(6)

yourAnswerToTheQuestion