Alla fine sono riuscito a individuare le opzioni giuste per compilare un programma vuoto (Foo.cpp) in Visual C++ .NET:
cl /CLR /LD Foo.cpp /link /NOENTRY
Lo schema dei colori corrisponde a quello del post precedente. Aggiungo sotto, altri 4 commenti ai 4 precedenti:
- il codice IL più pulito per i programmi vuoti è generato dal compilatore Visual C# .NET (a parte, ovviamente, quello corrispondente all'IL stesso);
- la dimensione della DLL per Visual C++ .NET è identica a quella della DLL per JScript .NET: 3584 bytes (coincidenza, secondo me, pazzesca! - anche perché gli IL sono diversi)
- la direttiva .permissionset ha associata la SecurityAction RequestMinimum (System.Security.Permissions.SecurityAction.RequestMinimum). Cioè è come se avessimo in C#, l'assembly decorato con:
using System.Security.Permissions;
[assembly:SecurityPermission(SecurityAction.RequestMinimum)]
L'array di byte esadecimali assegnato a questa direttiva rappresenta (vedi la spiegazione nel libro di Lidin) il seguente XML encodato Unicode:
<PermissionSet class="System.Security.PermissionSet" version="1">
<IPermission
class="System.Security.Permissions.SecurityPermission, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="NoFlags"
/>
</PermissionSet>
Linguaggio .NET |
Compilatore |
IL |
Dimensiune DLL in byte |
Visual C++ .NET |
cl |
.assembly extern mscorlib { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) .hash = (39 E4 FC 93 06 1A 5E 87 28 97 0F 5F AC AD B4 21 EF 71 E8 D2 ) .ver 1:0:5000:0 } |
3584 |
.assembly extern Microsoft.VisualC { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) .hash = (FA D4 FB A8 39 90 F9 05 C0 39 A3 20 C0 CD FA DD BD 57 E0 C4 ) .ver 7:0:5000:0 } |
.assembly Foo { |
.permissionset reqmin = (3C 00 50 00 65 00 72 00 6D 00 69 00 73 00 73 00 69 00 6F 00 6E 00 53 00 65 00 74 00 20 00 63 00 6C 00 61 00 73 00 73 00 3D 00 22 00 53 00 79 00 73 00 74 00 65 00 6D 00 2E 00 53 00 65 00 63 00 75 00 72 00 69 00 74 00 79 00 2E 00 50 00 65 00 72 00 6D 00 69 00 73 00 73 00 69 00 6F 00 6E 00 53 00 65 00 74 00 22 00 0D 00 0A 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 76 00 65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22 00 31 00 22 00 3E 00 0D 00 0A 00 20 00 20 00 20 00 3C 00 49 00 50 00 65 00 72 00 6D 00 69 00 73 00 73 00 69 00 6F 00 6E 00 20 00 63 00 6C 00 61 00 73 00 73 00 3D 00 22 00 53 00 79 00 73 00 74 00 65 00 6D 00 2E 00 53 00 65 00 63 00 75 00 72 00 69 00 74 00 79 00 2E 00 50 00 65 00 72 00 6D 00 69 00 73 00 73 00 69 00 6F 00 6E 00 73 00 2E 00 53 00 65 00 63 00 75 00 72 00 69 00 74 00 79 00 50 00 65 00 72 00 6D 00 69 00 73 00 73 00 69 00 6F 00 6E 00 2C 00 20 00 6D 00 73 00 63 00 6F 00 72 00 6C 00 69 00 62 00 2C 00 20 00 56 00 65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 31 00 2E 00 30 00 2E 00 35 00 30 00 30 00 30 00 2E 00 30 00 2C 00 20 00 43 00 75 00 6C 00 74 00 75 00 72 00 65 00 3D 00 6E 00 65 00 75 00 74 00 72 00 61 00 6C 00 2C 00 20 00 50 00 75 00 62 00 6C 00 69 00 63 00 4B 00 65 00 79 00 54 00 6F 00 6B 00 65 00 6E 00 3D 00 62 00 37 00 37 00 61 00 35 00 63 00 35 00 36 00 31 00 39 00 33 00 34 00 65 00 30 00 38 00 39 00 22 00 0D 00 0A 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 76 00 65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22 00 31 00 22 00 0D 00 0A 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 46 00 6C 00 61 00 67 00 73 00 3D 00 22 00 53 00 6B 00 69 00 70 00 56 00 65 00 72 00 69 00 66 00 69 00 63 00 61 00 74 00 69 00 6F 00 6E 00 22 00 2F 00 3E 00 0D 00 0A 00 3C 00 2F 00 50 00 65 00 72 00 6D 00 69 00 73 00 73 00 69 00 6F 00 6E 00 53 00 65 00 74 00 3E 00 0D 00 0A 00 ) |
.hash algorithm 0x00008004 .ver 0:0:0:0 } |
.module Foo.dll .imagebase 0x10000000 .subsystem 0x00000002 .file alignment 512 .corflags 0x00000000 |
.custom ([mscorlib]System.Runtime.CompilerServices.AssemblyAttributesGoHereSM) instance void [mscorlib]System.Security.Permissions.SecurityPermissionAttribute::.ctor(valuetype [mscorlib]System.Security.Permissions.SecurityAction) = ( 01 00 08 00 00 00 01 00 54 02 10 53 6B 69 70 56 65 72 69 66 69 63 61 74 69 6F 6E 01 ) |