2

.NET C#で記述されたプログラムをデバッグする必要があります。

具体的には、必要なのは、関数が呼び出された後に何が返されるかを確認することだけです。私はこの目的のためにMicrosoftVisualStudioを使用できることを発見しました-それはILを理解しています。ILDASMを使用してそのexeファイルのソースコードを取得します。pdbファイルを取得し、ILASMを使用してILコードからexeファイルを取得するよりも。ただし、元のexeファイルは、ILASMの後に取得するexeファイルとは異なります。

プログラムは起動しますが、AccessViolationがあり、関数を実行しようとしています。その結果を確認する必要があります。プログラムは難読化されていません。

私が間違っていること、または成功する結果を得るために何をする必要がありますか?

4

4 に答える 4

3

exe->il->exe が機能しない理由はさまざまです。あなたが言及したもの(難読化されたIL)以外のいくつかは、ネイティブコードも含む実行可能ファイル、または(直接または間接的に)独自の署名を検査するデジタル署名された実行可能ファイルです。

一部のデバッガーは、アプリケーションを再構築しなくても IL をステップ実行できます。個人的には、これにはILSpyを使用するのが好きです。最新リリースのバイナリには、デバッグに必要なビットが含まれていないことに注意してください。そのためには、ソースからビルドする必要があります。

代替案は MDbg である必要があります: Mike Stall は、2005 年に GUI に IL ステップを追加したと報告しています。私はそれを経験したことがありません。

于 2012-12-08T11:23:44.700 に答える
1

私は数年前に DILE を使用ました。

于 2013-02-05T01:04:03.843 に答える
0

hvdは、exe -> IL -> exe を実行するときに何が問題になるかを既に説明しましたが、私はそれについて詳しく説明するつもりはありません。ただし、関数の戻り値を非侵襲的にチェックする方法のヒントを紹介します。まず、プロジェクトのネイティブ デバッガーを有効にする必要があります。

C# アプリ:

ここに画像の説明を入力

ASP.NET:

ここに画像の説明を入力

次に、メソッドの最後の行にブレークポイントを配置し、イミディエイト ウィンドウを開いて次のように入力します (これは、デバッグ セッションごとに 1 回実行する必要があります)。

.load sos

次に、関数を終了し (Shift+F11)、レジストリ (eaxまたはrax) の値をコピーします (Debug->Windows->Registers)。関数の戻り値の型が値型 (int、byte など) である場合、値はすぐにわかります (ウォッチ ウィンドウに貼り付けて 10 進数値に変換することができます)。参照値の場合、e(r)ax にはヒープ内のオブジェクトのアドレスが含まれます。表示するには、イミディエイト ウィンドウに戻り、次のように入力します。

!do [コピーした e(r)ax 値]

オブジェクトは、すべてのプロパティとフィールドとともにイミディエイト ウィンドウに表示されます。文字列については、Debug->Windows->Memory ウィンドウを使用することもできます。

于 2012-12-10T11:50:59.513 に答える