6

msvcで、gccの「__builtin_return_address」に相当するものはありますか?

1レベルの深さの呼び出し元関数のアドレスを探しています。

4

1 に答える 1

11

__差出人住所

MSDNから:

_ReturnAddress組み込み関数は、制御が呼び出し元に戻った後に実行される呼び出し元関数の命令のアドレスを提供します

一部のプラットフォームでは、テールフォールディングが原因で結果が誤解を招く可能性があることに注意してください。コンパイラーでは、内部関数が2レベルの深さを返す場合があります。これは通常、次のようなコードで発生する可能性があります。

int DoSomething()
{
   return DoSomethingSpecial();
}

コンパイラーはコードを生成できるため、DoSomethingSpecialはDoSomethingの呼び出し元に直接戻ります。

また、差出人住所は信頼できません。セキュリティ上の決定を下すのに十分です。ここを参照してください。

于 2009-05-18T18:50:44.533 に答える