Common Intermediate Language - это объектно-ориентированный язык ассемблера, используемый.NET Framework, .NET Core и Mono. Языки.NET компилируются в CIL, который собирается в объектный код, имеющий формат в стиле байт-кода.
1 ответ

Замените ссылку на параметр, не используя ключевое слово ref (используя IL)

Я ищу, чтобы иметь возможность заменить ссылку на объект параметра без использования ключевого слова ref. Причина, по которой я избегаю использования ref, заключается в сохранении вызова инициализатора коллекции, который ищет Add(T item) метод, и мн…
26 июл '11 в 21:11
1 ответ

Почему мой оптимизированный IL дважды хранит одно и то же значение в переменной save?

Исходный код представляет собой цикл for следующим образом: public class ForLoop { public static void Main() { var count = 0; for (var i = 0; i < 10; i = i++) { count++; } } } Я скомпилировал его с включенной оптимизацией (csc /o+ ForLoop.cs), но…
14 мар '15 в 20:23
0 ответов

Отладчик уровня CIL для кода C# в Linux с моно

У меня есть следующий код C#, который я скомпилировал в Linux с помощью mono, и я хочу пошагово выполнить его команды CIL. В частности, я хочу иметь возможность исследовать стек и видеть значения, извлеченные и извлеченные из него. using System; nam…
01 сен '18 в 14:49
1 ответ

F# хвост рекурсивный вызов

У меня есть этот код: let rec collect ( t : BCFile list ) ( acc : Set<BCFile> ) : Set<BCFile> = match t with | [] -> acc | hr::tl -> collect ( tl ) ( Set.union acc ( FindSourceFilesForTarget ( hr ) ) ) let s = collect (Set.toList t…
27 авг '13 в 19:54
5 ответов

Как работает callvirt под капотом?

Я пытаюсь понять, как CLR реализует ссылочные типы и полиморфизм. Я сослался на Essential .Net Vol. 1 от Don Box, который помогает справиться с большинством вещей. Но я застрял / смутился из-за следующей проблемы, когда попытался поиграться с некото…
27 ноя '10 в 15:39
3 ответа

Что означает этот перечислитель, сгенерированный компилятором?

Я написал довольно сложный метод, который дает доходность IEnumerable<string>, но когда я проверял выходные данные компилятора в Reflector, я не понимал конкретную часть сгенерированной компилятором реализации IEnumerator: void IDisposable.Dis…
17 фев '09 в 07:26
1 ответ

Струнный строитель в CIL (MSIL)

Я пытаюсь сгенерировать код, который принимает StringBuilder и записывает значения всех свойств класса в строку. У меня есть следующее, но в настоящее время я получаю "Недопустимый токен метода" в следующем коде: public static DynamicAccessor<T&g…
20 окт '09 в 20:08
1 ответ

"неуправляемое" ограничение общего параметра в IL

Когда я компилирую следующий код: type Class1<'T when 'T : unmanaged> = class end type Class2<'T> = class end в IL это выглядит так: .class auto ansi serializable nested public Class1`1<T> extends [mscorlib]System.Object .class aut…
02 апр '15 в 23:40
1 ответ

Что такое тип<Module>?

Я использую Mono.Cecil для чтения сборки, созданной Regex.CompileToAssembly(), Когда я перебираю типы, в корневом пространстве имен есть один тип с именем &lt;Module&gt;, Тип не имеет базового типа. Что это за тип? Это какой-то артефакт Mono.Cecil и…
25 фев '16 в 02:37
1 ответ

Как интерпретировать FNPTR из подписи типа BLOB?

Как мне следует интерпретировать FNPTR, за которым следует MethodDefSig или MethodRefSig? Я имею в виду, что BOOLEAN - это bool, OBJECT - это объект, SZARRAY - массив с нулями, но у FNPTR есть сигнатура метода, и я не могу написать что-то вроде: pub…
11 июл '18 в 13:25
3 ответа

Отладка в.NET в режиме выпуска

Некоторое время назад я прочитал статью о CLR, где автор показал, что если проект компилируется в режиме DEBUG, перед каждым оператором приходит команда NOP, что позволяет отлаживать код. Тем не менее, сегодня я обнаружил, что мы также можем отлажив…
15 июн '12 в 15:53
0 ответов

CIL инструкции неожиданное возвращаемое значение

Я пытаюсь создать il-инструкции вручную в учебных целях, но столкнулся с небольшой проблемой. У меня есть простая структура с интерфейсом: "MyInterface" с одним методом: "Handle", класс "AddTwo", который реализует "MyInterface" и класс "Program" с м…
02 июн '15 в 22:20
5 ответов

Каковы лучшие ресурсы для изучения CIL (MSIL)

Я - опытный программист на C# 3 / .NET 3.5, желающий начать писать код времени выполнения с помощью System.Reflection.Emit.DynamicMethod. Я хотел бы перейти на следующий уровень, познакомившись с IL. Любые указатели (каламбур предназначен)?
30 сен '08 в 22:21
2 ответа

Преобразуйте метод класса в IL и выполните его во время выполнения

Я хочу преобразовать метод в IL-коды из класса, а затем выполнить его, вызвав его. Ниже приведен пример из msdn: https://msdn.microsoft.com/en-us/library/system.reflection.emit.methodbuilder.createmethodbody(v=vs.110).aspx. Он показывает именно то, …
09 дек '16 в 17:15
1 ответ

Почему я не могу войти в инструкцию Call во время отладки / разборки?

Разборка выглядит так: methShort( ref x, ref y ); 000007FF00163F67 lea r8,[rsp+34h] 000007FF00163F6C lea rdx,[rsp+30h] 000007FF00163F71 mov rcx,qword ptr [rsp+20h] 000007FF00163F76 mov rcx,qword ptr [rcx+8] 000007FF00163F7A mov rax,qword ptr [rsp+20…
30 апр '15 в 16:40
1 ответ

ldloc var против ldloc.n

Кто-нибудь знает, если есть даже небольшая разница, используя ldloc var CIL инструкция и ldloc.n? Учитывая эту локальную таблицу переменных в области видимости метода: .locals init ([0] int32 a, [1] int32 b) Эти инструкции: ldloc.0 ldloc.1 лучше, ху…
01 апр '14 в 12:27
2 ответа

Код MSIL для доступа к полю только для чтения приводит к ldarg.0

У меня есть простой метод в C#, который обращается к полю только для чтения: IL_0024: ldarg.0 IL_0025: ldfld string MyAssembly.MyClass.TestClass::A Моим естественным предположением было то, что это используется для загрузки ссылки "this" при доступе…
26 ноя '14 в 07:15
1 ответ

Создание DLL Compact Framework с помощью ilasm.exe Assembler

Поэтому я пытаюсь изменить Compact Framework для экспорта функции C. Он работает отлично на Full Framework. Используемый метод описан здесь. https://sites.google.com/site/robertgiesecke/Home/uploads/csharpprojecttemplateforunmanagedexports В любом с…
03 мар '14 в 20:00
1 ответ

Какова цель аргумента typeTok для инструкции stelem CIL?

CIL stelem инструкция (III.4.26 в ECMA 335 [pdf]) определяется как Формат Сборка Формат Описание A4 stelem typeTok Заменить элемент массива в индексе на значение в стеке Переход стека: …, Массив, индекс, значение, -> … Я не понимаю, какова цель аргу…
13 ноя '13 в 10:06
2 ответа

Почему директива.MaxStack является необязательной в коде MSIL?

Я изучаю ассемблер в свободное время. Может кто-нибудь объяснить, почему.maxstack представляется необязательным в этой программе. Я попытался найти ответ в Интернете и в своей книге безуспешно, т.е. программа будет компилироваться и запускаться с ко…
23 мар '12 в 20:21