MSVC эквивалентен '__builtin_return_address' - PullRequest
4 голосов
/ 18 мая 2009

С msvc есть ли эквивалент gcc "__builtin_return_address"?

Я ищу адрес вызывающей функции, 1 уровень в глубину.

1 Ответ

9 голосов
/ 18 мая 2009

__ ReturnAddress

Из MSDN:

Внутренний _ReturnAddress обеспечивает адрес инструкции в вызывающая функция, которая будет выполнена после контроля возвращается к звонящему

Обратите внимание, что на некоторых платформах результат может вводить в заблуждение из-за складывания хвоста - компилятор может иметь внутреннюю функцию, возвращающую глубину 2 уровня. Обычно это может происходить для кода, подобного этому:

int DoSomething()
{
   return DoSomethingSpecial();
}

Компилятор может генерировать код, поэтому DoSomethingSpecial возвращает непосредственно вызывающей стороне DoSomething.

Кроме того, обратный адрес недостаточно надежен, чтобы принимать решения по безопасности, см. здесь .

...