0

私は現在、別の .NET プロセスに挿入して関数の戻り値をオーバーライドできる .NET コードを作成する方法を研究しています。私のコードは、次のようにメソッド呼び出しの戻り値を変更するという考えです。

Public Function DoSomething() As String

Return "Value"

End Function

私のコードは DoSomething() の呼び出しをインターセプトし、「値」ではなく、独自のカスタム文字列を返します。

この種のことを行うには、.NET プロファイリング API を使用して調べる必要があると思います。プロファイリング API を使用した経験のある人はいますか?もしそうなら、このコード インジェクションは可能だと思いますか?

これを悪意のあるものに使用するつもりはありません。.NET で非常に低レベルのことを試して、それが可能かどうかを確認したいだけです。

乾杯。ジャス。

4

5 に答える 5

0

PostSharp はこれを行うことができますが、実行時ではなく、最初に記述された後にコードを変更します。

于 2009-04-09T21:13:10.860 に答える
0

Typemock Isolator に付属するCThruプロジェクトは、この機能を提供します。
このプロジェクトはオープン ソースですが、Typemock Isolator を使用しています。
これにより、コールバック メソッドを登録し、実行時にその動作を変更できます。
単体テストでの実行に限定されません。
注意すべきことの 1 つは、一度使用するとパフォーマンスが低下することです。

于 2010-08-09T08:45:06.810 に答える
0

メッセージシンクを調査するかもしれません...これは高度な領域ですが、基本的には、あなたがやろうとしていることを正確に行い、ある関数から別の関数への呼び出しをインターセプトし、インターセプト中に独自のコードを実行します...メッセージ シンクは互いにリンクすることができ、呼び出しが開始されたときに処理される送信メッセージ シンクとして記述したり、反対側で処理される受信シンクとして記述したりできます。

詳しい説明はこちら

于 2009-04-09T20:57:14.440 に答える
0

TypeMock Isolatorを使用してこれを行うことができます。

私は TypeMock を持っていませんが、彼らの例のいくつかに基づいて、次のようなものでそれを行うことができると思います: (最初に C#、次に VB に変換しようとします)

using (RecordExpectations recorder = RecorderManager.StartRecording())
{
    DoSomething();
    recorder.Return("My Own Custom String");
}

Using recorder As RecordExpectations = RecorderManager.StartRecording()
    DoSomething
    recorder.Return("My Own Custom String")
End Using

TypeMock はオープンソース プロジェクトでは無料のようですが、それ以外の場合は費用がかかります。しかし、Profiling API のコーディングは既に行われているので、毛むくじゃらの C++ を書くことではなく、問題を解決することについて心配することができます。

于 2009-04-09T20:19:37.120 に答える
0

回り道は、Win32 で行う方法です。私は Detours.NET を見たことがありませんが、彼らがやっていることから、あなたがやろうとしていることを実装する方法についてのヒントが得られるかもしれません。

于 2009-04-09T20:24:41.193 に答える