GNU/Linux >> Znalost Linux >  >> Linux

.net-core:Ekvivalent ILDASM / ILASM

Nezdá se, že by existoval nativní nástroj Microsoftu, který by tyto funkce sloužil v Linuxu, a v současnosti není zabudován do dot-net-core.

Mono však umožňuje sestavení a rozebrání kódu IL:

Pokyny k instalaci naleznete zde.

To, co hledáte, je:

ilasm - For assembling
monodis - For disassembling

Ty se nacházejí v balíčku mono-utils:

např. Na Debianu 8 jsem provedl následující:

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

Nicméně, pro informaci, pro ty, kteří se snaží vytvářet exporty, Mono nezdá, že by zvládl x64 exportní syntaxi.


Nástroje ildasm i ilasm jsou vytvořeny pomocí CoreCLR z tohoto úložiště:https://github.com/dotnet/coreclr. Zahrnují podobnou funkčnost jako verze dodávané s Windows (bez GUI atd.).

Jsou dodávány balíčky nuget, které je také obsahují (https://www.nuget.org/packages?q=ildasm), ale jsou specifické pro platformu a také vyžadují použití odpovídající verze CoreCLR, takže nejsou jednoduché. konzumovat přes nuget. Nejjednodušší způsob, jak je spustit na vaší platformě, je jednoduše je sestavit ze zdroje z coreclr repo.


Pojďme 'instalovat' ildasm nástroj pomocí souvisejícího balíčku nuget:

  • definujte RID (Runtime Identifier)
dotnet --info

# execution result
..
Runtime Environment:
 OS Name:     ubuntu
 OS Version:  18.04
 OS Platform: Linux
 RID:         ubuntu.18.04-x64 # <----
..
  • stáhněte si balíček runtime.{RID}.Microsoft.NETCore.ILDAsm . V mém případě je to:runtime.ubuntu.18.04-x64.Microsoft.NETCore.ILDAsm
  • rozbalte jej a rozbalte spustitelný soubor '/runtimes/{RID}/native/ildasm'
  • udělte mu oprávnění ke spuštění a zkopírujte jej do složky runtime .NET (volání dotnet --list-runtimes vypsat běhové moduly)
chmod +x ildasm
sudo mv ildasm /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/
  • vytvořit symbolický odkaz
ln -s /usr/share/dotnet/shared/Microsoft.NETCore.App/{version}/ildasm ildasm
  • provozovat ildasmus
./ildasm {path}/project.dll >> {path}/project.il

Stejné kroky platí pro ilasmus.

Jako alternativní způsob zvažte použití nástroje 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

Výstup IL do souboru:

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

dotnet ildasm program.dll -o program.il

Linux
  1. „který“ ekvivalent pro sdílené knihovny?

  2. Ekvivalentní maximální hloubka pro hledání v Aix?

  3. Ekvivalent WaitForSingleObject a WaitForMultipleObjects v Linuxu?

  1. Existuje 'git sed' nebo ekvivalent?

  2. ekvivalent příkazu fallocate() v OS X?

  3. Linux ekvivalentní k robocopy?

  1. Linuxový ekvivalent registru Windows

  2. Windows ekvivalentní xargs?

  3. Ekvivalent Process Monitor pro Linux?