ILDASM и ILASM, как их использовать? - PullRequest
0 голосов
/ 26 августа 2018

Я с трудом пытаюсь (Dis) собрать dll с помощью командной строки Visual Studio, не выглядите так просто, как я вижу на странице Microsoft .

Я использую ildasm для этого:

ildasm myLibrary.dll output:MyLibrary.il

И я получаю: Невозможно открыть 'MyLibrary.il' для вывода.

Я также пыталсяполный путь:

ildasm directory\myLibrary.dll output:directory\MyLibrary.il

И я получаю: УКАЗАНО НЕСКОЛЬКИХ ВХОДНЫХ ФАЙЛОВ

Использование графического интерфейса ildasm действительно работает, но когда я использую ilasm:

ilasm myLibrary.il /dll

Я получаю: Не могу открыть 'myLibrary.il' , когда я использую полный путь, я получаю ту же ошибку.

Что здесь не так?

1 Ответ

0 голосов
/ 26 августа 2018

просто, давайте возьмем эту строку кода:

using System;      
public class sample  
{
    static void Main(string[] args)
    {
        Console.WriteLine("Inside main ...");
    }
}

Давайте скомпилируем App.cs в App.exe.Этот исполняемый файл теперь печатает Inside main ... когда мы его запускаем.

Теперь давайте попробуем изменить вывод этого исполняемого файла, не касаясь его исходных файлов.

Вы запускаете ildasm App.exe /out:App.il для генерации кода IL, соответствующего исполняемому файлу .Теперь вы можете отредактировать этот код il в блокноте и изменить ldstr с «Внутри основного…» на «Внутри основного изменено…», как показано ниже:

IL_0000: nop

IL_0001: ldstr "Внутри главного ..."

IL_0006: вызов void [mscorlib] System.Console :: WriteLine (строка)

IL_000b: nop

IL_000c: ret

К

IL_0000: nop

IL_0001: ldstr "Внутри главного изменилось ..."

IL_0006: call void mscorlib] System.Console :: WriteLine (строка)

IL_000b: nop

IL_000c: ret

Теперь давайте перестроим исполняемый файл из этого файла il, запустив ilasm App.il. Создается новый App.exe.Если вы запустите App.exe, вы получите следующий вывод: «Внутри главного изменено…»

Есть полезные сообщения в social.msdn и в c-sharpcorner какхорошо ориентируясь в использовании ILDASM и ILASM.

...