.NET で作成された、頻繁に使用するプログラムがあります。このプログラムには非常に迷惑な小さなバグがあり、アプリの開発者はどこにも見つかりません。
リフレクターで問題の場所を見つけたので、ここに単一の if ステートメントを追加して、プログラムを再コンパイルしたいだけです。
これを行う最も簡単な方法は何ですか?
リフレクターでエクスポート機能を使用してみましたが、完全には機能していないようです。たとえば、多くの using ディレクティブが欠落しており、int にキャストされた enum も適切にエクスポートされません。私はこれをいくつかの作業で修正できると信じていますが、これを行うより簡単な方法があるかどうか疑問に思っています.
更新:これを行うことで解決しました:
プログラムは単一の実行可能ファイルです
- C#-view でリフレクターのバグを見つけます。次に、IL ビューに切り替えて、手順 5 で何を探すべきかを確認します。
- ildasm で変更したいプログラムを開きます
- ダンプを押して空のフォルダーを選択すると、デフォルト設定が機能しました。
- このフォルダーで .il ファイルを見つけて、任意のテキストエディターで開きます
- ステップ 1 のコードを見つけます。
- それを新しいコードに置き換えます。私の場合、関数のすべての内容を単純なリターン (IL_0000: ret) に置き換える必要がありました。すべての修正がこれほど簡単になるとは思いません。
- 手順 3 のフォルダーでコマンド ウィンドウを開きます。
- ilasm を実行します。元の exe からいくつかのリソースも含める必要がありました。これらはildasmで自動出力されます。この ilasm を次のように使用しました"C:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe" test.il /resource=test.res /output=FixedProgram.exe
終わり!私は今、修正されたプログラムを数分しか使用していませんが、バグを除いて以前と同じように動作するようです:)
また、アプリケーションの設定でいくつかの問題が発生しました。%appdata%\ProgramNameには、すべての設定が格納されているProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjsのようなフォルダーがありました。私の新しい実行可能ファイルは、このような新しいフォルダーを作成し、最後にさまざまなランダムな文字を付け、デフォルト設定を使用しました。以前に使用した設定をコピーするには、古いフォルダーのすべての内容を新しいフォルダーにコピーするだけです。