.net-core: ILDASM / ILASM的等效工具

16

是否有类似 ILDASM/ILASM 的工具适用于 .net-core?

具体来说,我正在寻找能够在 Linux 上运行的工具(这也是为什么要使用 .net-core 的原因)。

3个回答

10

ildasm和ilasm工具都是使用此存储库中的CoreCLR构建的:https://github.com/dotnet/coreclr。它们包含与Windows版本相似的功能(不包括GUI等)。

还有一些NuGet软件包也包含它们(https://www.nuget.org/packages?q=ildasm),但它们是特定于平台的,并且还需要匹配的CoreCLR版本才能使用,因此通过NuGet使用它们并不简单。在您的平台上运行这些工具最简单的方法就是从coreclr存储库中构建它们。


这是一个比我的好得多的答案。谢谢你发帖。我不确定我是怎么错过coreCLR的,它可能解决一些问题。 - Doug
这些工具是否已经编译好了版本,还是我需要构建存储库来获取它们? - Javier Holguera
@JavierHolguera,就像我之前提到的那样,你可以从NuGet包中下载并使用它们,但你需要下载适合你操作系统的正确的单个NuGet包。 - Eric Mellino

4

看起来在Linux上没有微软的本地工具能够完成这些功能,目前也没有内置于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导出语法。

1
值得注意的是,ikdasmmonodis更适合反汇编。 - Vladimir Panteleev

3

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

dotnet --info

# execution result
..
Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64 # <----
..
  • 下载包runtime.{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

这些步骤非常有效,但需要注意的是,您不需要将可执行文件放在已安装的SDK相同的位置。 它是一个本地可执行文件,不依赖于.Net运行时或库,因此可以将其放在任何您喜欢的位置。 - RubberDuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接