2011-04-23 42 views
2

仍在使用基於修改ILAsm文件的混淆程序。 (Ref。Which C# method names should not be obfuscated?是否可以從ILAsm文件中刪除.property語句以供生產使用?

在查看ILAsm代碼時,我感覺到.property語句不用於任何事情,至少不用於程序執行。我是否認爲他們只是爲Visual Studio提供元數據?如果是這樣,當ILAsm代碼只用於生產永遠不會用於Visual Studio的生產模塊時,只需將其刪除即可?

+2

所以,愚蠢的問題:你試過去除它,看看它有什麼影響?你在ILAsm和.property上做了什麼研究,看看它有什麼用途? – jcolebrand 2011-04-23 00:18:54

+1

也許我可以嘗試這樣做,也許它會好起來,也許以後會很明顯,它畢竟不是一個好主意。所以也許一個聰明的事情就是要求那些比我有更多知識的人提供建議。 – RenniePet 2011-04-23 00:40:21

+0

非常真實,確實非常真實。我只是好奇,如果你已經遇到了什麼。 – jcolebrand 2011-04-23 00:49:09

回答

4

事實上,聲明屬性並不影響程序執行的事實是正確的。 由於本書在介紹有關屬性的章節中說明,JIT編譯器和執行引擎完全不瞭解屬性,並且沒有IL指令對屬性概念進行任何引用。

請注意,Visual Studio不是唯一的元數據消費者。如果你去掉.property並重新組裝,你將會擁有getter和setter方法,但它顯然不再是一個屬性。這成爲一個問題的最明顯的例子:如果一個對象的實例被切換到另一個使用反射來調用該類的每個屬性的方法?由於提出的混淆方法,屬性不會被發現,並且運行時行爲已經發生變化。

當然,像反射和序列化這樣的場景是混淆工具的一個常見問題,正如您在前面的問題中討論的那樣。所以,我說的是,這是有問題的,但是它在與其他線程中討論的類似的場景中存在問題 - 尤其是在運行時正在使用元數據或序列化的場景。

我上面提到的這本書的最新版有一個不同的名字:Expert .NET 2.0 IL Assembler;它可能是對你有用的參考。 Compiling for the .NET Common Language Runtime也可能是有價值的。

+0

感謝您提供非常豐富的答案。這一定花了一些時間打印,我很欣賞它。 – RenniePet 2011-04-23 09:43:24

相關問題