如何在函数内获取函数返回地址?

Ray*_*ond 4 c++ gcc visual-c++

我想在我的跟踪器中打印返回值,有两个问题

  1. 如何获取退货地址?
  2. 返回位置在 ~Tracer() 之前或之后更新?

这里需要文本,以便 Stackoverflow 格式化代码:

struct Tracer
{
  int* _retval;
  ~Tracer() 
  { printf("return value is %d", *_retval); }
};


int foo()
{
  Tracer __tracter = { __Question_1_how_to_get_return_address_here__ };

  if(cond) {
     return 0;
  } else {
     return 99;
  }

  //Question-2: 
  // return postion is updated before OR after ~Tracer() called ???
}
Run Code Online (Sandbox Code Playgroud)

Ray*_*ond 5

我找到了问题 1 的一些提示,现在检查 Vc 代码

对于 gcc,__builtin_return_address http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html

对于 Visual C++,_ReturnAddress

  • 我假设“返回地址”是指控制权将返回到的可执行代码位置,*不是*从当前函数返回的值。 (2认同)