_AddressOfReturnAddress
Блок, относящийся только к системам Microsoft
Предоставляет адрес расположения в памяти, в котором содержится обратный адрес текущей функции. Этот адрес не может использоваться для доступа к другим расположениям в памяти (например, аргументы функции).
Синтаксис
void * _AddressOfReturnAddress();
Требования
Intrinsic | Архитектура |
---|---|
_AddressOfReturnAddress |
x86, x64, ARM, ARM64 |
Заголовочный файл< Intrin. h>
Комментарии
Если _AddressOfReturnAddress
используется в программе, скомпилированной с параметром/CLR, то функция, содержащая _AddressOfReturnAddress
вызов, компилируется как собственная функция. Если функция, скомпилированная как управляемые вызовы в функцию, содержащую _AddressOfReturnAddress
, _AddressOfReturnAddress
может работать не так, как ожидалось.
Эта процедура доступна только как встроенная функция.
Пример
// compiler_intrinsics_AddressOfReturnAddress.cpp
// processor: x86, x64
#include <stdio.h>
#include <intrin.h>
// This function will print three values:
// (1) The address retrieved from _AddressOfReturnAdress
// (2) The return address stored at the location returned in (1)
// (3) The return address retrieved the _ReturnAddress* intrinsic
// Note that (2) and (3) should be the same address.
__declspec(noinline)
void func() {
void* pvAddressOfReturnAddress = _AddressOfReturnAddress();
printf_s("%p\n", pvAddressOfReturnAddress);
printf_s("%p\n", *((void**) pvAddressOfReturnAddress));
printf_s("%p\n", _ReturnAddress());
}
int main() {
func();
}
0012FF78
00401058
00401058
Завершение блока, относящегося только к системам Майкрософт