簡體   English   中英

沒有PDB文件的C#反編譯器如何工作?

[英]How do C# decompiler work without PDB files?

我從John Robbins博客知道, .NET PDB文件包含源文件名,行號和局部變量名。 但是,諸如ILSpy.Net Reflector類的逆向工程軟件仍然可以弄清楚大部分代碼。

代碼流更容易獲得。 但是這些軟件如何提取函數名稱,變量名稱之類的數據?

代碼流更容易獲得。 但是這些軟件如何提取函數名稱,變量名稱之類的數據?

程序集在元數據中包含此類信息。 規范中所述,

通過元數據中表示的類型聲明,將新類型(值類型和引用類型)引入CTS(通用類型系統)。 此外,元數據是一種結構化的方式,用於表示CLI(通用語言基礎結構)用於定位和加載類,在內存中布置實例,解析方法調用,將CIL(通用中間語言)轉換為本地代碼,增強安全性的所有信息。 ,並設置運行時上下文邊界。

另外,請務必注意,這些信息不僅可以通過這些“逆向工程”工具訪問,還可以通過Reflection來訪問C#(或VB)代碼。 例如,通過反射可以知道給定類型的方法名稱,因為它是元數據的一部分。

這是.Net指南的摘錄,解釋了元數據中包括的內容:

元數據以與語言無關的方式描述了代碼中定義的每種類型和成員。 元數據存儲以下信息:

  • 組件說明。

    • 身份(名稱,版本,文化,公鑰)。

    • 導出的類型。

    • 該程序集依賴的其他程序集。

    • 運行所需的安全權限。

  • 類型說明。

    • 名稱,可見性,基類和實現的接口。

    • 成員(方法,字段,屬性,事件,嵌套類型)。

  • 屬性。

    • 修改類型和成員的其他描述性元素。

現在,它不一定包括局部變量名稱,此類工具通常不會對它們進行正確的反向工程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM