回答
反射就是這樣做的...所以是的,這是可能的,假設你有正確的上下文(解析類型令牌等)。
但是,就像使用Reflector一樣,反向工程代碼可能與原始代碼完全不同,但它具有相同的語義(如果代碼生成器中沒有錯誤)。
是的,使用.NET Reflector。
Mono.Cecil能提供一些分析功能:
http://www.mono-project.com/Cecil
不知道是否可以分析純粹的IL代碼。
來自該網站:「簡單的英語,與塞西爾,你可以加載現有的管理組件」。所以,需要一個組件。 – Oded 2010-10-17 19:53:01
不知道它這會工作,但ILDASM聽起來是正確的:
MSIL反是一個配套工具MSIL彙編程序(Ilasm.exe)。 Ildasm.exe需要一個包含Microsoft中間語言(MSIL)代碼的可移植可執行文件(PE),並創建一個適合作爲Ilasm.exe輸入的文本文件。
請注意文件是一個PE文件的要求,所以對於任何實際操作,這仍然基本上是一個託管程序集。
由於這些指令的低水平,他們不一定會直接對應於高層次的代碼 - 甚至反射器不會給你確切的原代碼。
您可能需要編寫自己的工具才能實現此目的,因爲程序集將包含一些可能需要的信息(例如引用的程序集)。
總之,你不能把「一塊CIL代碼」反編譯成高級語言。拋開高級語言,你甚至無法正確反編譯它。因爲,CIL並不僅僅意味着一堆指令,有些指令還有作爲操作數的變量。 Metatokens只是一些對象(類型,方法,字符串等)的整數引用。這些信息存儲在程序集中。即使我們忽略了這些信息,也存在另一個問題:異常處理。沒有「嘗試」和「捕捉」說明(但有最終等)。要確定try-catch/finally塊,你需要再次組裝。因爲這些信息以彙編形式存儲爲偏移長度對(塊邊界存儲)。
- 1. 逆向工程彙編代碼
- 2. 逆向工程彙編代碼到C
- 3. 如何進行逆向工程算法?
- 4. 如何對這裏使用的編碼/解碼方法進行逆向工程?
- 5. 逆向工程的某些可嵌入代碼的可行性
- 6. 針對java的逆向工程工具
- 7. 逆向工程
- 8. 無法使用Hibernate對java類進行逆向工程更改
- 9. 逆向工程日期到一些編碼的數字
- 10. 對Google SVG代碼進行反向工程
- 11. Visual Basic工具(UML代碼或逆向工程)
- 12. 逆向工程一個字符串掩碼/模糊函數
- 13. 逆向工程ORM
- 14. 逆向工程C++
- 15. 逆向工程VaultRemoveItem
- 16. @SequenceGenerator - allocationSize,使用Eclipse進行逆向工程Hibernate工具
- 17. 帶休眠逆向工程的類代碼
- 18. 從c代碼到順序圖的逆向工程
- 19. UML中使用ecplise的逆向工程代碼
- 20. 使用彈簧進行休眠的逆向工程
- 21. 怎樣才能實現Java字節碼加密(防止逆向工程)
- 22. Java逆向工程教程
- 23. MSIL代碼問題
- 24. 將C++ Linux二進制文件轉換爲僞C++代碼。逆向工程
- 25. 數據結構的逆向工程
- 26. 是否有可能在Rational Rose中逆向工程C#代碼?
- 27. 異常,而使用STAR UML逆向工程Java代碼
- 28. 逆向工程C#解決方案生成獲得源代碼
- 29. 逆向工程黑盒串行協議
- 30. 考慮進行逆向工程/反彙編
你的意思只是一堆不屬於程序集的'msil'指令嗎? – Oded 2010-10-17 19:46:57
使用反射器拆解反射器,並看它是如何做到的。 – 2010-10-17 19:54:54