Comment puis-je déterminer l'adresse de retour sur la pile?

Je sais que si je suis à l'intérieur d'une fonction foo() qui est appelé quelque part de bar() fonction, cette adresse de retour est poussé sur la pile.

    #include <stdio.h>

    void foo()
    {
            unsigned int x;
            printf("inside foo %x\n", &x);
    }
    int main()
    {
            foo();
            printf("in main\n");
            return 0;
    }

Dans le code ci-dessus, je vais avoir l'adresse de d'abord poussé variable locale sur la pile lors de foo fonction est active. Comment puis-je accéder à l'adresse de retour (principal appelé foo) qui est poussé quelque part avant cette variable sur la pile? C'est que l'emplacement fixe et peut être consulté par rapport à la première variable locale? Comment puis-je la modifier?

EDIT: Mon environnement est Ubuntu 9.04 sur processeur x86 avec le compilateur gcc.

source d'informationauteur vinit dhatrak | 2009-11-07