2009-08-20 9 views
2

gccのinstrument-functionsフラグを使用すると、関数の実行の前後に関数を実行するコードをインストルメントできます。 これらの関数は、__cyg_profile_func_enterおよび__cyg_profile_func_exitです。このパラメータは、現在の関数のアドレスです。 enterの2番目のパラメータはコールサイトのアドレスであり、終了する場合はそれが返されるアドレスです。__cyg_profile_func_exitを使用して返された値を取得する方法は?

計装された関数によって実際に返された値を取得する方法はありますか?

+0

返品の種類によって決まります...私はあなたの質問を正しく理解しているのだろうかと思います。 – AProgrammer

+0

計測された関数が返す値を取得しますか? – philant

+0

。私は機器の機能と私はそれが実際に – LB40

答えて

1

__cyg_profile_func_exitを使用して戻り値を取得するために私が知っている限りでは(これを決して引用することはありません)、最適化フラグを-O0、iircに設定する必要があります。度では機能しません-O0が戻り値をebxに格納し、高い方の最適化フラグがeaxに戻り値を格納するため、これよりも高い最適化が行われます。その後eipを呼ぶ。したがって、ebxがinstrumentation関数によって殺されるのを避けるために、関数を入力するときにebxを保存して、それを復元するときに復元します。

私はこれが幸運に役立つことを望みます。

+0

を返し、私はちょうどebxのコンテキストを見てみたいですか? – LB40

+0

はい。 -O0フラグがセットされると、ebxがポップされる直前に、mov 0xfffffffb(%ebp)、%eaxのようなものが得られるはずです。ここで、リターンコードは、eax(私たちの戻り値)の内容をebxにコピーします。簡単に理解するのに十分です。 – amaterasu

+0

私はそんなに低くしたいとは思わなかった... – LB40

関連する問題