Эквивалент _AddressOfReturnAddress() в Clang/LLVM?
Visual C++ имеет встроенную функцию под названием _AddressOfReturnAddress
который возвращает адрес возврата текущей функции в стеке.
Обратите внимание, что это не то же самое, что _ReturnAddress
, который возвращает только копию обратного адреса.
Есть ли эквивалент для _AddressOfReturnAddress
в Clang/LLVM?
2 ответа
Решение
Как rustyx, Clang/LLVM (и gcc) обеспечивает __builtin_return_address()
что эквивалентно _ReturnAddress()
, Clang / LLVM также обеспечивает __builtin_frame_address()
который (взависимости от особенностей вашего ABI, архитектуры и т. д.) может быть несколько аналогичен _AddressOfReturnAddress()
,
Как пример, следующий код...
std::cout<< ((int64_t) __builtin_return_address(0)) << ' '
<< ((int64_t) __builtin_frame_address (0)) << ' '
<<*((int64_t*)__builtin_frame_address (0)+1)<<'\n';
... печатает следующее на машине OSX.
140735807202733 140734600362944 140735807202733