動的解析にPin
を使用しています。コールバック関数内の任意の位置で実行を再開する
私の64ビットx86バイナリコードの動的解析タスクでは、シグナル処理の中で特定のメモリアクセスエラーを修正した後、任意のプログラム位置(たとえば、現在実行されている関数の2番目の命令)で実行を再開したいと思いますコールバック。
BOOL catchSignalSEGV(THREADID tid, INT32 sig, CONTEXT *ctx, BOOL hasHandler, const EXCEPTION_INFO *pExceptInfo, VOID *v)
{
// I will first fix the memory access error according to certain rules.
fix();
// then I would like to resume the execution at an arbitrary position, say, at the beginning of current monitored function
set_reg(rip, 0x123456); // set the rip register
PIN_ExecuteAt(ctx); // resume the execution
return false;
}
しかし、私はこの例外を得た:E:PIN_ExecuteAt()コールバックから呼び出すことはできません
それはこのようなものになるだろう。
は、私は、信号処理関数の最後に戻り偽で「現在の命令」で実行を再開することができます知っているが、基本的に私は任意の位置で再開することができますか?
私はクリアですか?ご協力ありがとうございました!
ご協力いただきありがとうございます。私はあなたのアドバイスに従って作成しました。しかし、私はまだ 'パフォーマンスを向上させるために' if-then instrumentation'と混同しています...もっと詳しく説明できますか?ありがとう – computereasy
信号が性能に大きな影響を与える可能性があり引き起こす可能性があるすべての命令のための解析ルーチンを持つので、私はそれについて話していました。 if-then instrumentationがコメントセクションよりも多くのスペースを必要とすることを説明します。私はピンのウェブサイトに行き、チュートリアルセクションを見てみることをお勧めします。 – nitzanms