2012-02-12 255 views
4

有什麼辦法從C#代碼生成彙編代碼?我知道使用GAS的C代碼是可能的,但是有人知道C#可能嗎?從C#代碼生成彙編代碼?

+0

我不清楚你在問什麼。你想編譯你的C#程序集,或者你想編寫一個C#程序來輸出程序集嗎? – perelman 2012-02-12 07:44:21

+0

我想查看我的C#代碼在程序集中的外觀。爲了教育目的。立即參加大會班。 – dsta 2012-02-12 07:46:17

回答

2

當程序實際運行時,C#通常會編譯爲.NET字節碼(稱爲CIL or MSIL),然後是JIT(「Just In Time」)編譯爲本機代碼。 C#的編譯器時間早於Mono's AOT,因此您可以通過其中一個編譯C#程序,然後對其進行反彙編。其結果可能很難遵循。

更可能的是,您可能希望查看比CPU的彙編代碼稍高的字節碼,您可以在編譯的C#程序的.exe上使用ILdasm

2

C#代碼編譯成MSIL(MS中間語言),它實際上不是你從C編譯器獲得的真正的代碼。詳細瞭解.NET Framework應用程序的運行方式。

如果您想查看生成的IL代碼,請參閱this question

2

您可以使用NGEN工具以間接方式進行此操作,然後拆卸生成的二進制文件。或者,您可以使用調試器來檢查從MSIL創建的JIT代碼,Ollydbg 2就是這樣一個調試器。