Visual C++ 有一个内部函数调用_AddressOfReturnAddress
,它返回当前函数在堆栈上的返回地址的地址 。
请注意,这与 不同,_ReturnAddress
后者仅返回返回地址的副本。
_AddressOfReturnAddress
在 Clang/LLVM 中是否有任何等价物?
Visual C++ 有一个内部函数调用_AddressOfReturnAddress
,它返回当前函数在堆栈上的返回地址的地址 。
请注意,这与 不同,_ReturnAddress
后者仅返回返回地址的副本。
_AddressOfReturnAddress
在 Clang/LLVM 中是否有任何等价物?
正如rustyx 所指出的,Clang/LLVM(和 gcc)提供了__builtin_return_address()
相当于_ReturnAddress()
. Clang /LLVM 还提供了__builtin_frame_address()
可能与._AddressOfReturnAddress()
例如,以下代码...
std::cout<< ((int64_t) __builtin_return_address(0)) << ' '
<< ((int64_t) __builtin_frame_address (0)) << ' '
<<*((int64_t*)__builtin_frame_address (0)+1)<<'\n';
...在 OSX 机器上打印以下内容。
140735807202733 140734600362944 140735807202733
不,LLVM IR 没有为此提供内在函数。