次の方法で共有


_AddressOfReturnAddress

Microsoft 固有の仕様

現在の関数の戻りアドレスを保持するメモリ位置のアドレスを提供します。 このアドレスは、他のメモリの場所 (関数の引数など) にアクセスするために使用できません。

構文

void * _AddressOfReturnAddress();

必要条件

Intrinsic アーキテクチャ
_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 _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

Microsoft 固有の仕様はここまで

関連項目

コンパイラの組み込み
キーワード