cil

What is the purpose of hidebysig in a MSIL method

Using ildasm and a C# program e.g. static void Main(string[] args) { } gives: .method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 2 (0x2) .maxstack 8 IL_0000: nop IL_0001: ret } // end of method Program::Main What does the hidebysig construct do? ...

Running MSIL inside Visual Studio

We have Visual Studio 2005. I can successfully run MSIL programs from the command line using "ilasm". I would like to be able to run these inside VS. From other posts and searches, I gather you need to create a "Console Application" type of project? (They allude to the fact that VS can handle MSIL but I can't find any specific "how to...

MSIL : Superfluous branch

Consider this C# snippet: static string input = null; static string output = null; static void Main(string[] args) { input = "input"; output = CallMe(input); } public static string CallMe(string input) { output = "output"; return output; } Dissassembling using Reflector shows: .method private hidebysig static vo...

MSIL : Displaying the contents of the stack

I run MSIL inside Visual Studio or via Mdbg. Is there any way of displaying the contents of the MSIL stack? e.g. if I execute ldloc "some variable", is there any way of looking at the stack and seeing that the variable is now on the stack. I'm presuming that the MSIL stack is not the same as the CPU stack i.e. the memory pointed to b...

IS C++ converted into MSIL?

I have been a long time C# and .Net developer, and have been playing with the idea of learning c++. One of the primary reasons I have been thinking about this, is how much faster C++ can be over apps using the .Net framework. But am I right in assuming that if I write a C++ app in Visual Studio, and/or reference .Net libraries in a C++...

Possible to get MSIL of a C# Delegate?

Just out of curiosity ... is it possible to programmatically get the MSIL of a delegate? I'm curious because I've been toying with the idea of a distributed computing system where you can simply write programs, and the program itself would be distributed to each disparate node where work would occur. I know you could do it by copying t...

Stuck with ILIDE

I'm trying desperately to find a (good, even any?) IDE for MSIL. (For that c : http://stackoverflow.com/questions/640583/ide-for-msil) I thought I found one with ILIDE, but when debugging my code I always (it's not depending on the code) get : SandDock]TD.SandDock.ControlLayoutSystem::OnMouseMove(System.Windows.Forms.MouseEventArgs W...

Is it at all possible to extend System.Delegate?

It is not possible to inherit from System.Delegate or System.MulticastDelegate in C#. It is perfectly possible to do it in MSIL as long as you declare standard 'runtime managed' methods. However, every time I am adding a 'cil managed' method to the type, I am getting: System.TypeLoadException: Illegal definition for runtime implemented ...

Why does the C# compiler explicitly declare all interfaces a type implements?

The C# compiler seems to explicitly note all interfaces it, and its base classes implement. The CLI specs say that this is not necesary. I've seen some other compilers not emit this explicitly, and it seems to work fine. Is there any difference or reason the C# does this? The MSIL that the C# at the bottom generates for B is: .class pr...

Which languages compile to CIL / MSIL

Most of the lists I have seen comprise: C# VB.Net Other .NET language What languages fall into the "Other" category? I've come across: Delphi C++ Cobol.Net Chrome I'm sure there must be others? ...

Can someone explain these few lines of MSIL? Why does it move a value off the evaluation stack to a local variable, only to move it back immediately and return it?

The following MSIL code loads a single argument (a string), calls a method, which returns bool, and then returns that bool value. What I don't understand is why it calls stloc.0 to store the method's return value in a local variable, then performs an explicit unconditional control transfer to the very next labeled line (seems unnecessar...

Java and ASP.NET

Please can anyone tell me the difference between JVM and MSIL? ...

Has .Net IL changed at all since .Net 2.0?

I've heard the claim before that .Net 3.5 made no changes to the IL that it compiles to. Upon thinking through all of the compiler features that I know were introduced, it does, in fact, seem that they could all be implemented in the same old IL, but I can't find an official source to corroborate this claim. Is it true? ...

Linking CIL with native code

In C++/CLI the following is sample code that links native and managed code within the same file. #include "stdafx.h" #pragma unmanaged __declspec( dllexport ) void func2() { //native code goes here } #pragma managed void func_clr() { func2(); //managed code calls native } #pragma unmanaged __declspec( dllexport ) void func() ...

What is the signature format for metadata on generic methods in .NET 2.0/C#?

For instance, parameters in a method that use the "out" keyword in C# will show up in the metadata signature preceded by an ambersand "&". I'm trying to create the signature for a generic method but I don't want to use the metadata APIs to figure this out, surely it's documented somewhere? Here's an example of what I mean for BeginRecei...

Reference 'this' in dynamic event handler

In my 'myClass' class, I am using Reflection.Emit to dynamically write an event handler for one of the myClass class' members. I have done this successfully. Now, I want to modify the event handler to call one of the instance methods in the myClass class. However, I cannot figure out how to push a reference to 'this' onto the MSIL sta...

How to add the .entrypoint directive to a method (dynamic assembly)

I want to create a simple application using the classes in System.Reflection.Emit. How can I add the enrypoint directive to the Main method? AssemblyName aName = new AssemblyName("Hello"); AssemblyBuilder aBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Save); ModuleBuilder mBuilder = aBuilder.Defin...

Iterator block generates try-fault in IL

After experimenting with an iterator block I noticed the generated IL code is not what I expect it to be. Instead of a try-finally block a try-fault block is generated, which I have never seen. I noticed that the compiler doesn't allow me use the fault keyword in 'handwritten' C#. Is there any difference between the 2? C# code: stati...

Feeding an object literal to ILGenerator

Food obj = ...; ILGenerator gen = (...).GetILGenerator(); gen.Emit( ?? obj ?? ); // replace this gen.Emit(OpCodes.Call, typeof(Person).GetMethod("Eat")); It's apparently not possible to cleanly push obj onto the evaluation stack, but I am open to ugly hacks which might compromise e.g. portability. ModuleBuilder.DefineInitializedData a...

"Operation could destablize the runtime" and DynamicMethod with value types

I'm trying to generalize the following IL (from Reflector): .method private hidebysig instance void SetValue(valuetype Test.TestFixture/ValueSource& thing, string 'value') cil managed { .maxstack 8 L_0000: nop L_0001: ldarg.1 L_0002: ldarg.2 L_0003: call instance void Test.TestFixture/ValueSource::set_Value(string...