#include <stdio.h>
unsigned read_eip () __attribute__((noinline));
unsigned read_eip ()
{
    unsigned callerpc;
    __asm __volatile("movl 4(%%ebp), %0" : "=r" (callerpc));
    return callerpc;
}

int main() {
    unsigned esp, eip;
    __asm("movl %%esp, %0" : "=a" (esp));
    eip = read_eip();
    printf("esp: %x eip: %x\n", esp, eip);
    return 0;
}
