4

我正在尝试针对 .NetCore3.1 控制台应用程序运行作为 Visual Studio 2019 的一部分安装的 ildasm(中间语言反汇编程序)。

使用 Visual Studio 2019 的开发人员命令提示符并运行以下命令

ildasm.exe D:\DotNet\IntroductionToCsharp\IntroductionToCsharp\bin\Debug\netcoreapp3.1\IntroductionToCsharp\bin\Debug\netcoreapp3.1\IntroductionToCsharp.exe

但是会出现以下错误:

'D:\DotNet\IntroductionToCsharp\IntroductionToCsharp\bin\Debug\netcoreapp3.1\ IntroductionToCsharp.exe' 没有有效的 CLR 标头,无法反汇编

此文件夹内容

注意:在非核心 (.Net Framework 4.x) exe 上运行相同的命令可以正常工作。也许在 .Net Core 中查看 IL 需要一些特别的东西?

4

3 回答 3

5

正如已经指出的那样,.exe.NET Core 中的内容只不过是一个主机。它的唯一目的是加载 CoreCLR,然后 JIT 编译并执行程序集的 Main 方法。代码本身存储在.dll. 您可以使用您最喜欢的反汇编程序(ILDASM、JetBrains 的 dotPeek、ILSpy 等)进行检查。

为什么 IL 反汇编程序可以.exe在 .NET Framework 中运行?因为可执行文件将是一个托管程序集,具有相应的托管标头。与 .NET Core 不同,.NET Framework 从 Windows 操作系统的 Image Loader 获得广泛支持,可以设置所有内容,然后在可执行文件中运行托管代码。请参阅此处讨论的第二点。

于 2020-03-08T18:34:55.137 回答
2

注意:netcore 中的 EXE 仅适用于“windows 用户”,您应该始终使用 dll

看这里

您可以对 netcore 程序集 (dll) 尝试以下步骤:

1 你需要在你的 dll netcore 的同一个文件夹中有 coreclr

2(在命令行VS中运行命令)

ildasm.exe /all /out:<path to output>.il <path to dll>.dll
于 2020-03-05T17:03:09.923 回答
-3

您应该将 ildasm 指向您的程序集文件(.dll 或 .exe),而不是您的项目文件夹。

ldasm.exe D:\DotNet\IntroductionToCsharp\IntroductionToCsharp\bin\Debug\netcoreapp3.1\IntroductionToCsharp.exe
于 2020-01-20T07:05:46.040 回答