2015-11-07 136 views
1

我已反編譯C#DLL,現在無法編譯它。它顯示了奇怪的錯誤,例如在某些開關塊中,某些情況下塊沒有它們的break語句,或顯示「不能將int轉換爲bool」等錯誤。但是對於這個大小的DLL,錯誤的數量並不是很大,所以我認爲這不是反編譯器的問題。反編譯с#代碼顯示錯誤

編譯器(例如,生活中不安全的東西)會對解決這個問題有一些影響嗎?或者爲什麼會出現這種奇怪的錯誤?

P.S.該DLL沒有被破壞 - 應用程序現在正在使用它。我正在使用dotPeek進行反編譯,並使用Visual Studio 15編譯結果代碼。

+0

http://stackoverflow.com/a/15555859/4767498 –

+0

反編譯器從來都不是完美的。而dotPeek肯定在不完美的反編譯器類別中佔據領先地位。它們主要是爲了幫助診斷第三方庫中的意外行爲。並推廣該公司的其他工具,實際上帶來了金錢。侵犯他人的版權不在功能列表之上。 –

+2

@HansPassant反編譯一個你沒有源代碼的DLL並不一定意味着它侵犯了版權。 – Rob

回答

0

將IL反編譯爲C#非常困難,而且反編譯器可能做錯了什麼。根據我的經驗,反編譯和編譯代碼的行爲也可能與原始程序集不同,因此請注意。而這樣的編譯錯誤可能是dotPeek不確定的錯誤,所以想想它應該做什麼或在IL中查找。

如果您願意對程序集進行非常小的編輯(注入方法調用,公開某些內容),直接在IL中通過ildasm獲取它可能會更安全。

1

對於這樣的錯誤,如:

"Can not cast int to bool" 

絕對沒有任何編譯器指令,讓你的編譯器繼續前進,我認爲你的反編譯搞砸了反編譯的東西......你可以簡單地與其他嘗試反編譯器,看看你是否得到另一個結果,有效的替代方案是:ILSpy,JustDecompileDotnet IL Editor

要知道,一些商業DLL進行模糊處理只是爲了嘗試過不去的反編譯和反編譯誰...

要小心,以避免破壞一些版權。