[英]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.