.NET 6+ 的 ildasm/ilasm 工具在哪裡?
0 | 2,046 |
在某些特殊情境下我們會想將 .NET dll/exe 反組譯成 CIL,或許是想研究 .NET 編譯行為,或許是要魔改無原始碼程式搞暴力破解。總之,.NET Framework 時代有 IL 反組譯及組譯工具 - ildasm.exe、ilasm.exe,安裝 Visual Studio 後開個 Developer Command Prompt 就能使用(位於 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools 之類的目錄)。
不過,到 .NET Core / .NET 6+ 時代,要去哪裡找 .NET 6 用的 ildasm 跟 ilasm?好問題。
(LINQPad 有反組譯 IL 功能,但只限程式碼片段)
答案是 - 需透用 NuGet 下載安裝。
我找到兩種做法:
- 參照 Microsoft.NETCore.ILDAsm 或 Microsoft.NETCore.ILAsm,編譯時 NuGet 將會依作業系統下載對映版本放在 ~/.nuget/packages/runtime-{Runtime Identifier, RID}/n.0.0/runtimes//native/ildasm:
dotnet add package Microsoft.NETCore.ILDAsm
dotnet add package Microsoft.NETCore.ILAsm
- 依作業系統別參照 runtime.win-x64.Microsoft.NETCore.ILDAsm/ILAdsm,編譯後 ildasm 或 ilasm 會放在 bin/Debug/net6.0/runtimes//native
# Windows x64
dotnet add package runtime.win-x64.Microsoft.NETCore.ILDAsm
# macOS
dotnet add package runtime.osx-arm64.Microsoft.NETCore.ILDAsm
# Linux x64
dotnet add package runtime.linux-x64.Microsoft.NETCore.ILDAsm
試了一下,ildasm/ilasm 也跨平台了,在 Linux 嘛 A 通!
有趣的是,跨平台後的 ildasm/ilasm 依然原汁原味沿用 .NET Framework 版參數語法,使用 /OUT、/UTF8 而非改走 POSIX 參數語法慣例,猜想是舊版程式移植改寫而非重寫,遵循 If it works, don't touch it 鐵律吧! 呵。
Tips of how to install ildasm and ilasm tool for .NET 6+.
Comments
Be the first to post a comment