1

VisualStudio内またはMdbg経由でMSILを実行します。

MSILスタックの内容を表示する方法はありますか?

たとえば、ldloc "some variable"を実行した場合、スタックを調べて、変数がスタック上にあることを確認する方法はありますか。

MSILスタックはCPUスタック、つまりSPレジスタが指すメモリと同じではないと思いますか?

4

2 に答える 2

6

実行時には、実際には "MSIL" スタックはありません。デバッグ モードでも、実行されるコードは常に JIT コンパイルされます。MSIL を JIT コンパイルするプロセスは、MSIL を仮想スタック マシンから実行中のプラットフォーム用の通常のアセンブリ コードに "フラット化" します。つまり、値がすでにレジスターに存在していた場合、 のldloc.0ようなものに変換されたり、ノーオペレーションにさえ変換される可能性があります。mov eax, [sp + 4]特定の命令をデバッグする場合ldlocは、逆アセンブルでそれを調べて、ldoloc が何に変換され、実際にどこからデータをロードしているかを確認する必要があります。

WinDbg + SoS ツール (別の投稿で説明) は、マネージ コードの観点から CPU スタックを表示するのに役立ちます。ただし、"MSIL" スタックを表示することはできません。表示するものが存在しないためです。

于 2009-05-20T18:48:50.617 に答える
1

WinDbg + SoSを使用して、それ以上のことができます。WinDbgの使用方法に関するリファレンスについては、この質問を確認してください。

于 2009-03-26T19:35:18.823 に答える