#include <stdio.h>
#include <stdlib.h>
int fun()
{
unsigned long ret_addr = 0;
__asm__("push %%rax\n\t"
"movq 8(%%rbp),%%rax\n\t"
"movq %%rax,%0\n\t"
"pop %%rax":"=m"(ret_addr));
printf("%p\n",(void*)ret_addr);
return 0;
}
int main()
{
unsigned long cur_addr = 0;
fun();
__asm__("callq NEXT\n\t"
"NEXT:\n\t"
"pop %0":"=m"(cur_addr));
cur_addr -= 5; //减去5是callq本身的长度
printf("*******%p\n",(void*)cur_addr);
return 0;
}