Генерация ассемблерного кода из кода C #? - PullRequest
6 голосов
/ 12 февраля 2012

Есть ли способ генерировать ассемблерный код из кода C #?Я знаю, что это возможно с кодом C с помощью GAS, но кто-нибудь знает, возможно ли это с C #?

Ответы [ 4 ]

3 голосов
/ 12 февраля 2012

Код C # компилируется в MSIL (MS Intermediate Language), который на самом деле не совсем asm-код, который вы получаете от компилятора C. Подробнее о работе приложений .NET Framework.

Если вы хотите посмотреть сгенерированный код IL, см. этот вопрос .

3 голосов
/ 12 февраля 2012

C # обычно компилируется в байт-код .NET (называемый CIL или MSIL ), а затем JIT ("Just In Time") компилируется в собственный код, когда программа фактически выполняется,Существуют заблаговременные компиляторы для C #, такие как AOT Mono, так что вы можете скомпилировать программу на C # через один из них, а затем разобрать ее.Вероятно, результат будет очень трудным для отслеживания.

Скорее всего, вы захотите взглянуть на байтовые коды, которые несколько выше уровня кода сборки процессора, что вы можете сделать, используя ILdasm в скомпилированной .exe программе на C #.

2 голосов
/ 13 июня 2018

Вы можете использовать BenchmarkDotNet с флагом printAsm, установленным в true.

[DisassemblyDiagnoser(printAsm: true, printSource: true)] // !!! use the new diagnoser!!
[RyuJitX64Job]
public class Simple
{
    int[] field = Enumerable.Range(0, 100).ToArray();

    [Benchmark]
    public int SumLocal()
    {
        var local = field; // we use local variable that points to the field

        int sum = 0;
        for (int i = 0; i < local.Length; i++)
            sum += local[i];

        return sum;
    }

    [Benchmark]
    public int SumField()
    {
        int sum = 0;
        for (int i = 0; i < field.Length; i++)
            sum += field[i];

        return sum;
    }
}

Который производит: enter image description here

2 голосов
/ 12 февраля 2012

Вы можете сделать это немного косвенным образом, используя инструмент NGEN , а затем разобрать создаваемый двоичный файл.В качестве альтернативы вы можете использовать отладчик для проверки кода JIT, созданного из MSIL, Ollydbg 2 является одним из таких отладчиков, способных сделать это.

...