Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Compilazione di un programma vuoto in Visual C++ .NET

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 )

Print | posted on sabato 22 gennaio 2005 21:04 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET