12

私は現在、実行可能ファイルを表すために(ここLLVM's ObjectFileに文書化されています)を使用しています。実行可能ファイルを に正常に読み込んだので、実行可能ファイル内のどの呼び出し先アドレスが、関数の呼び出しによって取得されたに含まれるシンボル名に対応するかを判断したいと考えています。の各シンボルを反復すると、各シンボルの名前とそのアドレスが得られますが、シンボルは動的であるため、各シンボルのアドレスは -1 です。これは、がシンボル名を対応する呼び出し先アドレスに直接関連付けないことを示します。ObjectFilesymbol_iteratorbegin_dynamic_symbols()symbol_iteratorObjectFile

どの呼び出し宛先アドレスが のどの動的シンボルにマップされているかを判断する方法はありますObjectFileか? を介してすべてのジャンプを手動で計算したくはありませんPLTGOTそうすることを避けることができれば。

4

1 に答える 1

1

動的シンボルのアドレスは、オブジェクト ファイルがメモリに読み込まれ、プログラムのシンボル テーブルにリンクされたときにのみ計算されます。一般に、リンクする前に最終的なアドレスを特定することは不可能です。

ObjectFile の代わりに LLVM の Link-Time Optimization モジュールを使用して、必要なデータを取得できる場合があります。これは、モジュールをロードするときにアドレス リンクを実行するためです (私の記憶が正しければ)。

幸運を!

于 2013-05-27T10:55:08.603 に答える