15

.net-core 有相当于 ILDASM / ILASM 的吗?

具体来说,我正在寻找在 Linux 上运行的东西(因此为什么要使用 .net-core)。

4

4 回答 4

10

ildasm 和 ilasm 工具都是使用来自此 repo 的 CoreCLR 构建的:https ://github.com/dotnet/coreclr 。它们包括与 Windows 附带的版本类似的功能(无 GUI 等)。

发布的 nuget 包也包含它们(https://www.nuget.org/packages?q=ildasm),但它们是特定于平台的,并且还需要匹配版本的 CoreCLR 才能使用,因此它们并不简单通过nuget消费。在您的平台上运行它们的最简单方法是从 coreclr 存储库的源代码构建它们。

于 2016-10-18T21:47:41.183 回答
4

似乎没有在 Linux 上提供这些功能的本机 Microsoft 工具,而且它目前没有内置到 dot-net-core 中。

然而,Mono 允许 IL 代码的汇编和反汇编:

安装说明可以在这里找到。

您正在寻找的是:

ilasm - For assembling
monodis - For disassembling

这些可以在包 mono-utils 中找到:

例如,在 Debian 8 上,我执行了以下操作:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian jessie" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
apt-get install mono-devel mono-utils

但是,仅供参考,对于那些尝试创建导出的人,Mono 似乎无法处理 x64 导出语法。

于 2016-10-11T18:39:03.477 回答
2

让我们使用相关的 nuget-package 来“安装” ildasm工具:

  • 定义RID(运行时标识符)
dotnet --info

# execution result
..
Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64 # <----
..
  • 下载包运行时。{RID}.Microsoft.NETCore.ILDAsm。就我而言,它是:runtime.ubuntu.18.04-x64.Microsoft.NETCore.ILDAsm
  • 解压缩并提取可执行文件'/runtimes/{RID}/native/ildasm'
  • 授予它执行权限并复制到 .NET 运行时文件夹(调用dotnet --list-runtimes列出运行时)
chmod +x ildasm
sudo mv ildasm /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/
  • 创建符号链接
ln -s /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/ildasm ildasm
  • 运行 ildasm
./ildasm {path}/project.dll >> {path}/project.il

相同的步骤适用于ilasm


作为替代方法,考虑使用dotnet-ildasm工具:

# install .net core runtime if required
# sudo apt-get update; \
#   sudo apt-get install -y apt-transport-https && \
#   sudo apt-get update && \
#   sudo apt-get install -y dotnet-runtime-3.0

# find required tool
dotnet tool search ildasm
# output:
# Package ID         Latest Version      Authors      Downloads      Verified
# ---------------------------------------------------------------------------
# dotnet-ildasm      0.12.2              pjbgf        100154                 
# dotasm             1.0.1               DotAsm       434 

# install tool
dotnet tool install -g dotnet-ildasm

将 IL 输出到文件:

# go to project folder
cd ../project/bin/Debug/netx.x

dotnet ildasm program.dll -o program.il
于 2020-12-26T04:05:44.940 回答
-2

这不是其他答案中提到的工具的完全替代品,但这个 F# 片段让我能够快速找到 AWS Lambda 所需的适当类型和函数名称:

open System.Reflection

[<EntryPoint>]
let main argv =
  let asm =
    argv
    |> Array.tryHead
    |> Option.map Assembly.LoadFrom
    |> Option.defaultWith (Assembly.GetExecutingAssembly)

  printfn "%s" asm.FullName

  for t in asm.GetTypes () do
    printfn " * %s" t.FullName

  0

于 2020-01-27T11:41:01.453 回答