cil

MSIL inspection

I have some MSIL in byte format (result of reflection's GetMethodBody()) that I'd like to analyze a bit. I'd like to find all classes created with the new operator in the MSIL. Any ideas on how to do that programmatically? ...

Visual Studio/RAD support for coding directly in IL?

For the longest time I've been curious to code in Intermediate Language just as an academic endeavour and to gain a better understanding of what's happening "under the hood". Does anybody provide Visual Studio support for *IL in the form of: project templates, IntelliSense integration, and those kind of RAD features? Edits: I don't mea...

Which processors can run CIL

Which processors are capable of running Common Intermediate Language(CIL), formerly known as Microsoft Intermediate Language (MSIL)? Clearly any machine that can run Microsoft Windows with .net qualifies as well as machines targeted by the Mono project. It would appear that the .NET Micro Framework has the ability to target other proces...

[MSIL] Variable comparison

Hi, The following C#-snippet: var x = 1; var y = 1; if (x == y) Console.Write("True"); Generates this MSIL: .locals init ( [0] int32 x, [1] int32 y, [2] bool CS$4$0000) L_0000: nop L_0001: ldc.i4.1 L_0002: stloc.0 L_0003: ldc.i4.1 L_0004: stloc.1 L_0005: ldloc.0 L_0006: ldloc.1 L_0007: ...

Are private classes being sealed at compilation?

Assume the following: we have class B, which is a private class nested inside class A. There isn't any class inheriting from class B. The question is: will the compiler automatically mark class B as Sealed? (NonInheritable in VB). Is there any good reason for the compiler not to mark class B as sealed? My line of thought is this: since...

Using Reflection.Emit to match existing constructor

First, here is the C# code and the disassembled IL: public class Program<T> { private List<T> _items; public Program(T x, [Microsoft.Scripting.ParamDictionary] Microsoft.Scripting.IAttributesCollection col) { _items = new List<T>(); _items.Add(x); } } Here is the IL of that constructor: .method public...

Where can I find information on the Get, Set and Address methods for multidimensional System.Array instances in .NET?

System.Array serves as the base class for all arrays in the Common Language Runtime (CLR). According to this article: For each concrete array type, [the] runtime adds three special methods: Get/Set/Address. and indeed if I disassemble this C# code, int[,] x = new int[1024,1024]; x[0,0] = 1; x[1,1] = 2; x[2,2] = 3; Console.WriteLin...

Writing a Compiler for .net - IL or Bytecode?

I'm currently diving into the inner workings of .net, which means IL. As an exercise, I want to build a brainf..k compiler for .net (yes, they already exist, but as said it's for learning purposes). For the moment I'm just writing some text files that contain .il and compile them with ilasm, which works. But I wonder if I could/should g...

While loop in IL - why stloc.0 and ldloc.0?

I'm trying to understand how a while loop looks in IL. I have written this C# function: static void Brackets() { while (memory[pointer] > 0) { // Snipped body of the while loop, as it's not important } } The IL looks like this: .method private hidebysig static void Brackets() cil mana...

Is there a difference between ECMA-335 and ISO/IEC 23271:2006? Also, is there a book version?

The .net CLI is standardized as both ECMA-335 and ISO/IEC 23271:2006 - is it 100% the same standard, or are there differences between these two? Also, is the standard available as a book? Makes it easier to read :) ...

How do I debug a .NET executable at MSIL-level?

I have a .NET executable file that I need to debug. I would like to step into it so that it stops on the first instruction and have a visual interface for single-stepping, breakpoints, etc. This seems like it should be easier but I haven't yet found a solution! I read about DbgCLR.exe on the web but I can't find that file on my system...

Intercept call to property get method in C#

Let's assume that we have this class: public class Person { public int Id { get; set; } public string Name { get; set; } } Now, is it possible in C# to intercept call to property get method, run some other method and return result of that method instead of property value? I'd like to be able to do some additional logic behind ...

How to disable ILASM warnings

Hi. Does anybody knows if there is a way to tell ilasm to completely ignore warnings when compiling an il file?? I know it is possible somehow, by inserting "something" inside the il code. But what? A ilasm command line parameter would come in handy too Thanks! ...

Programmatically access the CIL for a .NET type

Is there a straighforward library that I can use to access the CIL for a .NET type? Let me demonstrate what I want the fictitious CilExtractor to do: [Serializable] public class Type_For_Extract_Cil_Test { private int _field = 3; public int Method(int value) { checked { return _field + value; } } } [Test] public ...

Why are static classes considered “classes” and “reference types”?

I’ve been pondering about the C# and CIL type system today and I’ve started to wonder why static classes are considered classes. There are many ways in which they are not really classes: A “normal” class can contain non-static members, a static class can’t. In this respect, a class is more similar to a struct than it is to a static cla...

Call a dynamically generated method on a ILGenerator on the same type

Normally, when I want to call a dynamic method in another ILGenerator object that is writing a method on the same type I do the following : generator.Emit(OpCodes.Ldarg_0); // reference to the current object generator.Emit(OpCodes.Ldstr, "someArgument"); generator.Emit(OpCodes.Call, methodBuilder); //this methodbuilder is also defined...

Replacing instructions in a method's MethodBody

Hi, (First of all, this is a very lengthy post, but don't worry: I've already implemented all of it, I'm just asking your opinion, or possible alternatives.) I'm having trouble implementing the following; I'd appreciate some help: I get a Type as parameter. I define a subclass using reflection. Notice that I don't intend to modify th...

Viewing the CLI of a portable executable

What is a good program to get a nice, human readable form of the CLI of a portable executable file? I don't want a full disassembler because I'd like to learn how they work (or, in my case, not work). ...

Same IL code, different output - how is it possible?

I have a piece of code, which outputs different results, depending on the C# compiler and the runtime. The code in question is: using System; public class Program { public static void Main() { Console.WriteLine(string.Compare("alo\0alo\0", "alo\0alo\0\0", false, System.Globalization.CultureInfo.InvariantCulture)); } } ...

Instrumenting a string

Somewhere in C++ era i have crafted a library, which enabled string representation of the computation history. Having a math expression like: TScalar Compute(TScalar a, TScalar b, TScalar c) { return ( a + b ) * c; } I could render it's string representation: r = Compute(VerbalScalar("a", 1), VerbalScalar("b", 2), VerbalScalar("c", ...