質問

3DパーティAPIのコードの1行を自分のコードに置き換えたいと思います。

これは疑わしい練習ですが、彼らのバグを修正する必要があります。

役に立ちましたか?

解決

サードパーティや商業ソフトウェアのコードを分解しないことを容認していませんが、機能する方法があります。

でリフレクターを使用する場合 Reflexil プラグインは、強力な名前の署名を削除し、アセンブリにコードを注入/変更できます。

他のヒント

できますが、C#ではなくMSILを使用します。

http://ccimetadata.codeplex.com/ http://www.mono-project.com/cecil

また、Reflector.netを使用してDLLを破壊し、バグを修正して、それを補完することができます。

はい、できます。 1つには、DLLアセンブリはCIL(一般的な中間言語)です。原則として、あなたはそれを直接自分で修正することができます。

たとえば、Cecilのようなツールを使用できます。

http://www.mono-project.com/cecil

また、リフレクターのようなツールを使用して、最も快適な言語に逆コンパイルすることもできます。その時点で、コードを変更して、独自のカスタムアセンブリに再コンパイルすることができます。

http://www.red-gate.com/products/reflector/

セシルには逆コンパイラもあります:

http://evain.net/blog/articles/2008/12/15/cecil-decompiler

Monodevelop(Mono IDE)プロジェクトとしてアセンブリを開くことができます。 DLLをプロジェクトファイルとして開くだけで(十分なデバッグ情報がある場合)、変更およびビルドできるコードプロジェクトのように見えます。

http://monodevelop.com/

これらのツールはすべて、Microsoft .NETまたはMonoで使用できます。 MonoDevelopは、MonoをまったくインストールせずにWindowsにインストールできます。

もちろん、私はあなたができると言っています。私はあなたがそうすることを必ずしも支持しているわけではありません。自分の状況についてもっと知っているので、自分で物事の法的および倫理的な側面を解決する必要があります。

コールを代理および傍受しようとすることを検討しましたか aop ツール、 postsharp またはlinfu?

説明:AOPフレームワーク(アスペクト指向プログラミング)を使用すると、後の電話前に動作を挿入し、呼び出しを再ルーティングできます。より詳しい情報 ここ

このMSILの変更と、いくつかの追加の利点:

  • 修正はサードパーティDLLのアップグレードに耐えます(APIが安定している場合)
  • ライセンス条件の範囲内である必要があります
  • 問題の方法を修正した場合、プロキシを簡単に削除できます

独自のコードを挿入できず、ソースを取得できない場合、正当な方法でそれを行う機会がありません。

アセンブリは通常署名されており、変更できません。さらに、ほとんどのソフトウェアは著作権によって保護されています。

あなたがこのベンダーの重要な顧客である場合は、コードを求めてください。そしてもちろん、このバグを修正する権利のために。

ソースコードにアクセスできる場合は、変更を加えて再コンパイルしてみませんか?

バグのような方法を自分で(自分のコード内)書き換えて、外部ライブラリの代わりにそれを使用してみませんか?

それがマイナーな変更である場合、あなたはildasmを通してコードを丸くつまずかせる運があるかもしれません。

これについて少し違った方法で考えると、スプリアスコンポーネントを含める前にアプリの起動にDNSを使用してIPを解決し、System32 drivers etcのホストファイルにエントリを配置する可能性がありますか?実際に再びDNSに出かける必要があります(まあ、あなたはそうするでしょうが、それはほとんど瞬時にあるはずです)。

また、アセンブリを介してこれを行おうとする代わりに、実際にWindows DLL APIインジェクションの方法を見て、DNSリゾルバーにコールを引いてキャッシュを実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top