In the last post I showed the disassembled C# code created by Telerik JustDecompile, this time we will look at the underlying CIL (Common Intermediate Language) for the same program. If you haven’t looked at CIL, the thought might be a bit overwhelming, but it isn’t nearly as bad as you think. Below is the output associated with the main class from the command line compilation of the program:
And here is the output from the Visual Studio compilation of the same program:
The command line included a couple of nop (no or null operation) instructions to (I believe) align the instructions for better cache hits. Be that as it may, looking at this code you can see a nearly one to one relationship between it and the C#:
internal class Hello
private static void Main()
In fact, since JustDecompile allows it let’s look at the generated Visual Basic.NET code equivalent:
Friend Class Hello
Public Sub New()
Private Shared Sub Main()
For a program this simplistic, all three look close enough to the same that you can follow from one to the other. C# is a terse language and CIL is a high level assembly.
The next section of the specification has a bit larger program included to introduce the idea of name spaces and scope. We will investigate that next.