GNU/Linux >> Linux Esercitazione >  >> Linux

.net-core:Equivalente di ILDASM / ILASM

Non sembra che ci sia uno strumento Microsoft nativo che serva queste funzioni su Linux e non è attualmente integrato nel dot-net-core.

Tuttavia, Mono consente l'assemblaggio e il disassemblaggio del codice IL:

Le istruzioni per l'installazione possono essere trovate qui.

Quello che stai cercando è:

ilasm - For assembling
monodis - For disassembling

Questi si trovano nel pacchetto mono-utils:

per esempio. Su Debian 8 ho fatto quanto segue:

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

Tuttavia, per tua informazione, per coloro che tentano di creare esportazioni, Mono non sembra gestire la sintassi di esportazione x64.


Entrambi gli strumenti ildasm e ilasm sono creati con CoreCLR da questo repository:https://github.com/dotnet/coreclr. Includono funzionalità simili alle versioni fornite con Windows (senza GUI, ecc.).

Sono stati forniti pacchetti nuget che li includono anche (https://www.nuget.org/packages?q=ildasm), ma sono specifici della piattaforma e richiedono anche una versione corrispondente di CoreCLR da utilizzare, quindi non sono semplici da consumare tramite nuget. Il modo più semplice per eseguirli sulla tua piattaforma è semplicemente compilarli dal sorgente dal repository coreclr.


'Installiamo' ildasm strumento utilizzando il pacchetto nuget correlato:

  • definire RID (Runtime Identifier)
dotnet --info

# execution result
..
Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64 # <----
..
  • scarica il pacchetto runtime.{RID}.Microsoft.NETCore.ILDAsm . Nel mio caso è:runtime.ubuntu.18.04-x64.Microsoft.NETCore.ILDAsm
  • disarchivialo ed estrai il file eseguibile '/runtimes/{RID}/native/ildasm'
  • concedere l'autorizzazione all'esecuzione e copiarla nella cartella di runtime .NET (chiamare dotnet --list-runtimes per elencare i tempi di esecuzione)
chmod +x ildasm
sudo mv ildasm /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/
  • crea collegamento simbolico
ln -s /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/ildasm ildasm
  • esegui ildasm
./ildasm {path}/project.dll >> {path}/project.il

Gli stessi passaggi sono applicabili per ilasm.

In alternativa, considera l'utilizzo dello strumento 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

Invia IL al file:

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

dotnet ildasm program.dll -o program.il

Linux
  1. "quale" equivalente per le biblioteche condivise?

  2. Waitpid equivalente con timeout?

  3. windows equivalente di inet_aton

  4. WaitForSingleObject e WaitForMultipleObjects equivalenti in Linux?

  5. Esiste un 'git sed' o equivalente?

Usa l'equivalente di Task Manager in Linux

Profondità massima equivalente per Find in Aix?

Qual è un buon equivalente KDE di gnome-do?

Equivalente a Sysinternals Process Explorer su Linux

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

Qual è l'equivalente systemd di ntsysv?