GNU/Linux >> Tutoriales Linux >  >> Linux

.net-core:Equivalente de ILDASM/ILASM

No parece que haya una herramienta nativa de Microsoft que cumpla estas funciones en Linux y actualmente no está integrada en dot-net-core.

Sin embargo, Mono permite ensamblar y desensamblar código IL:

Las instrucciones de instalación se pueden encontrar aquí.

Lo que estás buscando es:

ilasm - For assembling
monodis - For disassembling

Estos se encuentran en el paquete mono-utils:

p.ej. En Debian 8 hice lo siguiente:

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

Sin embargo, FYI, para aquellos que intentan crear exportaciones, Mono no parece manejar la sintaxis de exportación x64.


Tanto las herramientas ildasm como ilasm se construyen con CoreCLR desde este repositorio:https://github.com/dotnet/coreclr. Incluyen una funcionalidad similar a las versiones enviadas con Windows (sin GUI, etc.).

Hay paquetes nuget enviados que también los incluyen (https://www.nuget.org/packages?q=ildasm), pero son específicos de la plataforma y también requieren una versión correspondiente de CoreCLR para usar, por lo que no son sencillos. para consumir a través de nuget. La forma más fácil de ejecutarlos en su plataforma es compilarlos desde el origen del repositorio de coreclr.


Vamos a 'instalar' ildasm herramienta usando el paquete nuget relacionado:

  • definir RID (identificador de tiempo de ejecución)
dotnet --info

# execution result
..
Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64 # <----
..
  • descargue el paquete runtime.{RID}.Microsoft.NETCore.ILDAsm . Para mi caso es:runtime.ubuntu.18.04-x64.Microsoft.NETCore.ILDAsm
  • desarchivarlo y extraer el archivo ejecutable '/runtimes/{RID}/native/ildasm'
  • concédale permiso de ejecución y cópielo en la carpeta de tiempo de ejecución de .NET (llame a dotnet --list-runtimes para enumerar los tiempos de ejecución)
chmod +x ildasm
sudo mv ildasm /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/
  • crear enlace simbólico
ln -s /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/ildasm ildasm
  • ejecutar ildasm
./ildasm {path}/project.dll >> {path}/project.il

Los mismos pasos son aplicables para ilasm.

Como una forma alternativa, considere usar la herramienta 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

Salida IL a archivo:

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

dotnet ildasm program.dll -o program.il

Linux
  1. ¿"cuál" equivalente para bibliotecas compartidas?

  2. Waitpid equivalente con tiempo de espera?

  3. ¿Hay un 'git sed' o equivalente?

  4. fallocate() comando equivalente en OS X?

  5. ¿Qué es un buen KDE equivalente a gnome-do?

Usar el equivalente del Administrador de tareas en Linux

Equivalente a Sysinternals Process Explorer en Linux

Windows equivalente a xargs?

Process Monitor equivalente para Linux?

yum equivalente a apt-get upgrade vs apt-get dist-upgrade?

¿Cuál es el systemd equivalente de ntsysv?