使用MSVC,有一个相当于gcc的 “__builtin_return_address”?

我希望找到调用函数的地址,1级深。

有帮助吗?

解决方案

__ReturnAddress

从MSDN:

  

在_ReturnAddress固有提供   在该指令的地址   将要执行的函数调用   后控制返回给调用者

请注意,在某些平台上,结果可能会产生误导,由于尾部折叠 - 编译器可能有你的内部函数返回2级深。这可以针对这样的代码通常发生:

int DoSomething()
{
   return DoSomethingSpecial();
}

所以DoSomethingSpecial直接返回的DoSomething的呼叫者的编译器可以生成代码。

另外,返回地址是不值得信赖,足以做出安全决策,看到的此处

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top