?一款開源的 .NET 程序集反編譯、編輯和調試神器
前言
說到.NET相關的反編譯工具大家腦海里第一個想到的工具是什么?ILSpy、dnSpy、還是dotPeek?咱們今天的主要內容是講講dnSpyEx(dnSpyEx是dnSpy項目的非官方Fork維護版本)這個開源的.NET程序集反編譯、編輯和調試工具該如何使用。
dnSpyEx
dnSpyEx是dnSpy(該代碼庫已于2020年12月21日被所有者歸檔為只讀狀態)項目的非官方Fork維護版本,一款開源、功能強大的.NET反編譯工具和調試器,可用于在沒有源代碼的情況下編輯和調試程序集。
主要功能
- 支持淺色、藍色和深色主題。
- 支持調試 .NET Framework、.NET Core 和 Unity 程序集。
- 支持編輯 .NET Framework、.NET 和 Unity 程序集。
- 支持多語言(中文、俄語、德語、法語、意大利語、英語等)。
工具源代碼
工具下載安裝運行
https://github.com/dnSpyEx/dnSpy/releases
下載完成后,雙擊dnSpy即可運行無需安裝:
創建測試項目并編譯成dll程序集
下面我們創建一個名為TestSample的.NET Core控制臺應用,然后寫上一段簡單的對象序列化和反序列化代碼示例。
(1) 測試項目創建
(2) 項目示例代碼
using Newtonsoft.Json;
namespace TestSample
{
public class Program
{
static void Main(string[] args)
{
var personList = new List<Person>();
personList.Add(new Person { Name = "張三", Age = 30 });
string json = JsonConvert.SerializeObject(personList);
Console.WriteLine("序列化后的 JSON 字符串:");
Console.WriteLine(json);
var deserializedPersonList = JsonConvert.DeserializeObject<List<Person>>(json);
Console.WriteLine("\n反序列化后的對象信息:");
foreach (var item in deserializedPersonList)
{
Console.WriteLine($"Name: {item.Name}, Age: {item.Age}");
}
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
}
(3) 找到dll程序集
..TestSample\bin\Debug\net8.0
使用工具調試程序集中的代碼
使用工具編輯程序集中的代碼
使用工具編輯程序集中的IL指令
項目源碼地址
更多項目實用功能和特性歡迎前往項目開源地址查看,別忘了給項目一個Star支持。
- dnSpyEx:https://github.com/dnSpyEx/dnSpy
- dnSpy:https://github.com/dnSpy/dnSpy