_ReturnAddress
Seção específica da Microsoft
O intrínseco _ReturnAddress
fornece o endereço da instrução na função de chamada que será executada após o retorno do controle ao chamador.
Crie o programa a seguir e passe por ele no depurador. Ao percorrer o programa, observe o endereço retornado de _ReturnAddress
. Em seguida, imediatamente após retornar da função em que _ReturnAddress
foi usado, abra a janela Como usar a janela de desmontagem e observe que o endereço da próxima instrução a ser executada corresponde ao endereço retornado de _ReturnAddress
.
Otimizações como inlining podem afetar o endereço de retorno. Por exemplo, se o programa de exemplo abaixo for compilado com /Ob1, inline_func
ele será embutido na função de chamada, main
. Portanto, as chamadas para _ReturnAddress
de inline_func
e main
produzirão o mesmo valor.
Quando _ReturnAddress
é usado em um programa compilado com /clr, a função que contém a chamada _ReturnAddress
é compilada como uma função nativa. Quando uma função compilada como gerenciada chama a função que contém _ReturnAddress
, _ReturnAddress
pode não se comportar conforme o esperado.
Requisitos
Arquivo de cabeçalho<intrin.h>
Exemplo
// 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;
}
Fim da seção específica da Microsoft
Confira também
_AddressOfReturnAddress
Intrínsecos do compilador
Palavras-chave