.NET compilers like mcs or mbas do not compile to native code, but to the COMMON INTERMEDIATE LANGUAGE.
IL code looks like this:
// hello world dissassembled with monodis .assembly extern mscorlib { .ver 0:0:0:0 } .assembly 'hello' { .hash algorithm 0x00008004 .ver 0:0:0:0 } .class private auto ansi beforefieldinit Hello extends [mscorlib]System.Object { // method line 1 .method public hidebysig specialname rtspecialname instance default void .ctor() cil managed { // Method begins at RVA 0x20ec // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void valuetype [corlib]System.Object::.ctor() IL_0006: ret } // end of method instance default void .ctor() // method line 2 .method public static default void Main() cil managed { // Method begins at RVA 0x20f4 .entrypoint // Code size 11 (0xb) .maxstack 8 IL_0000: ldstr "Hello Mono World!" IL_0005: call void class [corlib]System.Console::WriteLine(string) IL_000a: ret } // end of method default void Main() } // end of type HelloThere are two tools:
Both tools will be described in detail in the next two sub-chapters.