MSVC équivalent à « __builtin_return_address »
-
22-08-2019 - |
Question
Avec msvc, est-il un équivalent à la "__builtin_return_address" de gcc?
Je cherche à trouver l'adresse de la fonction d'appel, 1 niveau profond.
La solution
De MSDN:
La intrinsèque _ReturnAddress fournit l'adresse de l'instruction dans la fonction d'appel qui sera exécuté après le contrôle revient à l'appelant
Notez que sur certaines plates-formes, le résultat pourrait être trompeur en raison de pliage de queue - le compilateur peut avoir votre retour de la fonction intérieure profonde 2 niveaux. Cela peut généralement se produire pour le code comme ceci:
int DoSomething()
{
return DoSomethingSpecial();
}
Le compilateur peut générer du code si DoSomethingSpecial retourne directement à l'appelant de DoSomething.
En outre, l'adresse de retour est pas digne de confiance, assez pour prendre des décisions de sécurité, voir ici .