Just as you can use the METAINFO utility to inspect the NGWS runtime metadata inside a file, you can use the ILDASM to inspect (disassemble) its code. Below is an example of its output for the MessageBox example shown earlier. This output is produced with the command:
Ildasm MessageBox.exe
To view the several options supported by ILDASM, type:
Ildasm /?
// Microsoft (R) NGWS SDK IL Disassembler. Version 1999.13.1020.9 // Copyright (C) Microsoft Corp. 1998-1999 // VTableFixup Directory: // No data. .namespace __Microsoft_Visual_CPP__ { .class public auto ansi sealed __IsConst { } // end of class '__IsConst' .class public auto ansi sealed __IsVolatile { } // end of class '__IsVolatile' .class public auto ansi sealed __IsReallyLong { } // end of class '__IsReallyLong' .class public auto ansi sealed __IsReallySigned { } // end of class '__IsReallySigned' .class public auto ansi sealed __CustomMetaData { } // end of class '__CustomMetaData' .class public auto ansi sealed __DecoratedName { } // end of class '__DecoratedName' } // end of namespace '__Microsoft_Visual_CPP__' .class value public explicit ansi $MultiByte$24 { .pack 1 .size 24 } // end of class '$MultiByte$24' .class value public explicit ansi $MultiByte$26 { .pack 1 .size 26 } // end of class '$MultiByte$26' //Global methods //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .method public static void main() il managed implemented { .entrypoint // Method begins at RVA 0x1000 // Code size 45 (0x2d) .maxstack 4 .locals (class System.String pCaption, class System.String pText) IL_0000: ldnull IL_0001: stloc.0 IL_0002: ldnull IL_0003: stloc.1 IL_0004: ldptr D_00003000 IL_0009: newobj instance void System.String::.ctor(wchar*) IL_000e: stloc.0 IL_000f: ldptr D_00003018 IL_0014: newobj instance void System.String::.ctor(wchar*) IL_0019: stloc.1 IL_001a: ldc.i4 0x0 IL_001f: ldloc.0 IL_0020: ldloc.1 IL_0021: ldc.i4 0x0 IL_0026: call int32 MessageBox(void*,class System.String,class System.String,unsigned int32) IL_002b: pop IL_002c: ret } // end of global method 'main' .method public static int32 _mainMSIL(int32 A_0,int8** A_1,int8** A_2) il managed implemented { // Method begins at RVA 0x1040 // Code size 11 (0xb) .maxstack 1 IL_0000: call void main() IL_0005: ldc.i4 0x0 IL_000a: ret } // end of global method '_mainMSIL' .method public static pinvokeimpl("user32.dll" ansi) int32 MessageBox(void* hWnd,class System.String pText,class System.String pCaption,unsigned int32 uType) il managed{ } .data D_00003000 = bytearray ( 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 // H.e.l.l.o. .W.o. 72 00 6C 00 64 00 00 00) // r.l.d... .data D_00003018 = bytearray ( 50 00 49 00 6E 00 76 00 6F 00 6B 00 65 00 20 00 // P.I.n.v.o.k.e. . 54 00 65 00 73 00 74 00 00 00) // T.e.s.t... //*********** DISASSEMBLY COMPLETE ***********************