Jak mogę określić adres zwrotny na stosie?
Wiem, że jeśli jestem w jakiejś funkcjifoo()
który nazywa się gdzieśbar()
funkcja, wtedy ten adres zwrotny jest pchany na stosie.
#include <stdio.h>
void foo()
{
unsigned int x;
printf("inside foo %x\n", &x);
}
int main()
{
foo();
printf("in main\n");
return 0;
}
W powyższym kodzie otrzymam adres pierwszej wciśniętej zmiennej lokalnej na stosie, gdy funkcja foo jest aktywna. Jak mogę uzyskać dostęp do adresu zwrotnego (głównego o nazwie foo), który jest pchany gdzieś przed tą zmienną na stosie? Czy ta lokalizacja jest poprawiona i można uzyskać do niej dostęp w stosunku do pierwszej zmiennej lokalnej? Jak mogę to zmienić?
EDYCJA: Moje środowisko to Ubuntu 9.04 na procesorze x86 z kompilatorem gcc.