_ReturnAddress
Microsoft 전용
내장 함수는 _ReturnAddress
컨트롤이 호출자에게 반환된 후 실행될 호출 함수의 명령 주소를 제공합니다.
다음 프로그램을 빌드하고 디버거에서 단계별로 실행합니다. 프로그램을 단계별로 진행하면서 반환 _ReturnAddress
되는 주소를 적어 둡니다. 그런 다음 사용된 함수 _ReturnAddress
에서 즉시 반환한 후 방법: 디스어셈블리 창을 사용하여 실행할 다음 명령의 주소가 반환_ReturnAddress
된 주소와 일치하는지 확인합니다.
인라인 처리와 같은 최적화는 반환 주소에 영향을 줄 수 있습니다. 예를 들어 아래 샘플 프로그램이 /Ob1inline_func
로 컴파일된 경우 호출 함수main
에 인라인 처리됩니다. 따라서 원본 및 _ReturnAddress
inline_func
main
호출은 각각 동일한 값을 생성합니다.
/Clr 을 사용하여 컴파일된 프로그램에서 _ReturnAddress
을 사용하는 경우 호출 _ReturnAddress
을 포함하는 함수가 네이티브 함수로 컴파일됩니다. 포함된 _ReturnAddress
_ReturnAddress
함수에 대한 관리형 호출로 컴파일된 함수가 예상대로 작동하지 않을 수 있습니다.
요구 사항
헤더 파일<intrin.h>
예시
// compiler_intrinsics__ReturnAddress.cpp
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(_ReturnAddress)
__declspec(noinline)
void noinline_func(void)
{
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
}
__forceinline
void inline_func(void)
{
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
}
int main(void)
{
noinline_func();
inline_func();
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
return 0;
}
Microsoft 전용 종료