5

Pin を使用して関数呼び出しトレーサを作成しようとしています。各関数呼び出しと各引数の値を出力できます。

難しいのは、関数のすべての引数を取得することです。RTN_InsertCall を使用すると、関数の引数を計測コードに渡すことができます。

intel pin RTN_InsertCall 複数の関数引数

ただし、現在のルーチンの引数の数を知る必要があります。それを行う方法はありますか?

ありがとう!

4

2 に答える 2

2

問題のバイナリのデバッグ シンボルがあるかどうかに関する重要な情報を提供する必要があります。デバッグ シンボルを使用できる場合は、簡単です。それらを解析するための標準ライブラリがあります。

デバッグ シンボルがない場合は、非常に困難な場合があります。基本的には、IDA Pro のような視覚的な探索ツールを使用する方が適切です。削除されたバイナリの関数シグネチャを自動的に見つける方法についてはいくつかの研究が行われています (例: ftp://ftp.cs.wisc.edu/paradyn/papers/Jacobson11Unstrip.pdf )。問題は最終的に決定不能であり、すべてのツールはこの情報を再構築するためのヒューリスティックに頼っているため、ある時点で失敗します。無料で入手できる Chris Eagle の著書 ( http://www.tinker.tv/download/idaPro_ch12.pdf )の第 12 章では、IDA がこれを行う方法について説明しています。

于 2014-07-13T16:49:21.900 に答える
1

C では、型情報はバイナリに保持されません。

C++ では、関数のマングル名を使用して、引数の型を把握することができます。ただし、名前マングリングは標準ではなく、通常、異なるコンパイラ間で互換性がありません。明らかに、ここには保証はありません。

以下も参照してください。

プログラムで共有ライブラリの関数の署名を取得することは可能ですか?

関数の引数の型を取得する

于 2014-03-17T09:11:50.433 に答える