2011-07-15 11 views
3

難読化された.NetプログラムでVisual Studioデバッガを実行します。 (それは私自身のプログラムです - 私は他人のプログラムを解読しようとしていません)Visual Studio:逆アセンブルが使用できません

"System.Diagnostics.Debugger.Break()"でプログラムをコンパイルするとき、または実行中のプロセスにデバッガを接続するとデバッガは "No Source Available"と表示します。これはわかります。プログラムの難読化されたバージョンに対応するソースはありません。しかし、 "Show Disassembly"をクリックすると、Disassemblyウィンドウに "Disassembly available"と表示されます。

なぜですか?どのように私は分解を動作させるために行うことができますか?

「デバッグオプション」で「アドレスレベルのデバッグを有効にする」と「ソースが利用できない場合に逆アセンブリを表示」が選択されています。

ありがとうございました。問題の

EDIT

ただ、もう少し説明しようとする...

プログラムは、私自身のプログラムであり、かつ使用されている難読化プログラムは、私自身のプログラムです。難読化プログラムはILDAsm.exeを実行し、ILAsmコードを変更し、ILAsm.exeを実行します。

私の難読化は明らかに問題を引き起こしているので、プログラムは正しく機能しません。どのように動作していないのかを理解するために、私はそれをトレースしたいと思います。しかし、何らかの理由でVisual Studioのデバッガが「逆アセンブルなし」と言って、何もできません。 (非難読化プログラムはVisual Studioの下で実行されると逆アセンブリウィンドウが開いたと予想される情報を示していることができます。これは、VSデバッガを使用してこの問題を作り出すだけで難読化されたバージョンです。)

EDIT 2

ヘブン」私の質問に対する答えを見つけることができましたが、私は一種の回避策があります。

私はWinDbgをインストールし、難読化されたプログラムにアタッチできることを確認し、少なくとも1ステップ実行して、逆アセンブリウィンドウに現在の実行場所を表示することができます。しかし、以前はWinDbgを使ったことは一度もありませんでした。

私はまた、sos.dllをWinDbgにロードするためのいくつかのアドバイスに従ってきました。多分それが助けになるでしょう。

しかし、実際にやり遂げるのは、一時的なロギングステートメントを自分のプログラムにたくさん投げて、動作していない場所の周りにうまくいくと思います。

+1

"これは私のプログラムです" - おそらくあなたはソースコードを持っています。それをデバッグしますか? –

+0

いいえ、私の問題は、私の難読化がプログラムを非自明な方法で機能しないようにしていることです。難読化されたプログラムを追跡し、どこが崩壊しているのかを知ることが簡単になります。 – RenniePet

+0

http://stackoverflow.com/questions/5670626/which-c-method-names-should-not-be-obfuscatedおよびhttp://stackoverflow.com/questions/5761202/is-it-ok-to-プロダクトのためのilasmファイルからのremove-property-statements – RenniePet

答えて

3

OK、私は間違っていたことにつまずいた。

私の質問の最初の編集で言及したように、難読化はILDAsm.exeを実行し、ILAsmステートメントを変更し、ILAsm.exeを実行することによって行われています。 ILAsm.exeの/ Debugオプションが実行されていないことが判明しました。したがって、私のVisual StudioビルドがDebugビルドであっても、実行時のJIT変換はリリース/最適化コンバージョンでした。

ILAsm.exeに/ Debugが指定されています。私はPDBファイルを取得しています。また、Visual Studioデバッガが自分のプログラムに接続するとILソースコードが表示されます。だから今はすべてうまい!

関連する問題