Есть ли эквивалент ILDASM/ILASM для .net-core?
В частности, я ищу что-то, что работает в Linux (отсюда и .net-core).
Есть ли эквивалент ILDASM/ILASM для .net-core?
В частности, я ищу что-то, что работает в Linux (отсюда и .net-core).
Инструменты ildasm и ilasm созданы с помощью CoreCLR из этого репозитория: https://github.com/dotnet/coreclr а>. Они включают те же функции, что и версии, поставляемые с Windows (без графического интерфейса и т. д.).
Поставляются пакеты nuget, которые также включают их (https://www.nuget.org/packages?q=ildasm), но они зависят от платформы, а также требуют соответствующей версии CoreCLR для использования, поэтому их не так просто использовать с помощью nuget. Самый простой способ запустить их на вашей платформе — просто собрать их из исходного кода из репозитория coreclr.
Не похоже, что есть собственный инструмент Microsoft, который выполняет эти функции в 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.
ikdasm
лучше подходит для разборки, чем monodis
.
- person Vladimir Panteleev; 29.11.2016
Давайте «установим» инструмент ildasm, используя соответствующий пакет nuget:
dotnet --info
# execution result
..
Runtime Environment:
OS Name: ubuntu
OS Version: 18.04
OS Platform: Linux
RID: ubuntu.18.04-x64 # <----
..
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 {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
Это не полная замена инструментов, упомянутых в других ответах, но этот фрагмент 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