_AddressOfReturnAddress
Microsoft 固有の仕様
現在の関数の戻りアドレスを保持するメモリ位置のアドレスを提供します。 このアドレスは、他のメモリの場所 (関数の引数など) にアクセスするために使用できません。
構文
void * _AddressOfReturnAddress();
要件
Intrinsic | Architecture |
---|---|
_AddressOfReturnAddress |
x86、x64、ARM、ARM64 |
ヘッダー ファイル<intrin.h>
解説
clr でコンパイルされたプログラムで _AddressOfReturnAddress
を使用すると、_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 _AddressOfReturnAddress
// (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
Microsoft 固有の仕様はここまで