2009-08-25 26 views
1

我正在研究IL。從DLL二進制文件獲取IL代碼

我喜歡RedGate的.Net Reflector工具(最初是Lutz)。我已經有Serge Lidin和Ecma-335的書。看起來這些東西都是我們必須和IL一起工作的(當然除了ILAsm和ILDasm之外)。

我的任務是解析程序集二進制文件並獲取IL代碼。很明顯,程序集是一個二進制文件;因此,它只是一個字節鏈。要做我想做的事情,我需要知道程序集結構:哪些頭文件存在,它們佔用多少字節,字節偏移量以便在字節後讀取它的字節等。

利丁的書描述了它,但它不是100%對我來說很清楚。有沒有人試圖解析DLL作爲字節流?要將元數據和IL代碼作爲字節流,然後解析IL字節流以獲取IL源?我不想在這裏使用反思;我只想用二進制文件工作,而是。

單塞西爾是否也一樣?即使如此,我也想知道如何去做。

是的,我想創造另一輪像.net反射的,我想知道它是如何做。就像有人說:「盧茨不一定是世界上唯一知道如何製造它的人」。

順便說一句,ISDasm如何工作?它是用.net編碼的嗎?

任何想法,資源,例子?

謝謝。

回答

3

Mono.Cecil完全符合您的要求。所以,你可能想看看源代碼。

實際上,有一個正在進行的項目,名爲Cecil.Decompiler,從Jb Evain開始,基於Cecil的開源.NET反編譯器。

+0

你知道我可以在哪裏下載源代碼?以下URL http://anonsvn.mono-project.com/source/trunk/cecil/decompiler不適用於我。 謝謝。 – Antipod

+0

好吧,它似乎工作。我可以請你重試嗎? –

+0

是的,它現在有效。謝謝。 – Antipod

0

你可以ildasm直接使用:

ildasm.exe MyFile.dll /output:MyFile.il 

它可以從你的程序中實現自動化。

+0

想象一下,我想寫我自己的ildasm.exe。只是爲了更好地理解IL和DLL結構。 – Antipod