__builtin_extract_return_addr可以干什么
时间: 2023-07-22 18:07:38 浏览: 83
`__builtin_extract_return_addr()`函数是GCC和Clang编译器提供的一个内建函数(built-in function),用于提取当前函数调用者的返回地址。
该函数的作用是提取当前函数调用者所在代码位置的返回地址。返回地址是指在函数调用结束后,程序将继续执行的下一条指令的地址。通过`__builtin_extract_return_addr()`函数,您可以获取到这个返回地址。
一般情况下,`__builtin_extract_return_addr()`函数需要与`__builtin_return_address()`函数配合使用。`__builtin_return_address()`函数用于获取当前函数的返回地址,然后可以通过`__builtin_extract_return_addr()`函数来提取调用者的返回地址。
以下是一个示例代码,演示了如何使用`__builtin_return_address()`和`__builtin_extract_return_addr()`函数来获取当前函数和调用者的返回地址:
```c
#include <stdio.h>
void foo() {
void* return_addr = __builtin_return_address(0);
void* caller = __builtin_extract_return_addr(return_addr);
printf("Current function return address: %p\n", return_addr);
printf("Caller function return address: %p\n", caller);
}
int main() {
foo();
return 0;
}
```
在上述示例中,`__builtin_return_address(0)`用于获取当前函数的返回地址,然后将其作为参数传递给`__builtin_extract_return_addr()`函数以提取调用者的返回地址。
请注意,`__builtin_extract_return_addr()`函数可能依赖于编译器的实现,并且在不同的编译器上行为可能有所不同。因此,使用时请注意兼容性和可移植性。