__builtin_return_address返回的不是起始地址
时间: 2023-11-15 12:05:54 浏览: 48
您说得没错,我之前的回答有误。`__builtin_return_address`函数返回的是调用者的返回地址,而不是调用者的起始地址。在C/C++中,每个函数在被调用时都会在栈上分配一块内存空间,用来保存函数执行的上下文信息,比如函数的参数、局部变量、返回地址等。当函数执行完成后,它会使用栈上保存的返回地址来返回到它的调用者处继续执行。
因此,`__builtin_return_address`函数实际上返回的是保存在栈上的返回地址,通过这个返回地址可以找到调用者的起始地址。但是需要注意的是,这个返回地址的具体格式和编码方式可能会因为编译器、操作系统和CPU架构的不同而有所不同。
相关问题
GCC怎么支持 __builtin_return_address
GCC内置函数__builtin_return_address()用于获取当前函数调用者的返回地址。它的语法如下所示:
```
void* __builtin_return_address(unsigned int level);
```
其中level表示想要获取的返回地址的层数,0表示当前函数的返回地址,1表示调用当前函数的函数的返回地址,以此类推。例如,调用__builtin_return_address(0)将返回当前函数的返回地址。
GCC支持__builtin_return_address()函数的原理是利用了x86架构中的ebp寄存器和ret指令。当函数被调用时,ebp寄存器会被用来保存上一级函数的栈帧指针,而ret指令则会将当前函数的返回地址弹出栈顶。因此,通过访问ebp寄存器和栈空间,__builtin_return_address()函数可以获取到当前函数调用者的返回地址。
__builtin_return_address
__builtin_return_address是GCC内置函数,用于获取当前函数调用的返回地址。它的参数是一个整数,表示要获取的返回地址的层数。如果参数为,则返回当前函数的返回地址;如果参数为1,则返回调用当前函数的函数的返回地址,以此类推。