2012-04-08 5 views
10

Ho letto CLR con C# 3.0 e ho riflettuto su Assemblies, Modules and Headers tuttavia le cose si sono complicate. Questo è quello che ho capito, ma se sarebbe bello se qualcuno può chiarire le cose po 'di più:Moduli, gruppi, intestazioni in CLR

  1. moduli sono il risultato di csc.exe che contiene il codice IL e tabelle di metadati. tabelle di metadati contiene tre tabelle differenti che sono: "TypeRef, ModuleRef, MemberRef, etc"

    • Tabelle definizione come "ModuleDef, TypeDef, PropertyDef, MethodDef, EventDef, FieldDef" Tabelle
    • di riferimento come ad esempio
    • Tabelle Manifest **
  2. Assemblee sono contenitori che contengono molti moduli così come le risorse come immagini, documenti, PDF, ecc

    file PE
  3. che sta per Portable Executable sono file possono essere .EXE o .DLL. Questi file hanno intestazioni PE32 o PE32 +, intestazioni CLR, metadati, codice IL.

I libri dice Assemblea è un contenitore costituito da moduli e lo dice anche il modulo gestito è

Modulo Gestito:

Un riuscito modulo è un 32 bit portatile standard di Microsoft Windows File eseguibile (PE32) o un file eseguibile portatile Windows standard a 64 bit (PE32 +) che richiede l'esecuzione del CLR.

Richter, Jeffrey (2010-02-05). CLR via C# (posizioni Kindle 696-697). OReilly Media - A. Edizione Kindle.

Definizione dell'Assemblea:

Un assieme è un raggruppamento logico di uno o più moduli o risorsa file.

Richter, Jeffrey (2010-02-05). CLR via C# (posizioni Kindle 766-767). OReilly Media - A. Edizione Kindle.

enter image description here

così sembra che il modulo Gestito sono in realtà parte dell'Assemblea nell'immagine tratta dal libro stesso.

intestazioni PE32 appartengono Assemblee, comunque autore dice anche che appartiene al Managed moduli, ecc

Qual è la separazione qui? Perché ha usato il modulo e gli assiemi intercambiabili anche se pensavano che fossero abbastanza separati.

Un file PE gestito ha quattro parti principali: l'header PE32 (+), l'intestazione CLR , i metadati, e IL.L'intestazione PE32 (+) è l'informazione standard che Windows si aspetta. L'intestazione CLR è un piccolo blocco di informazioni specifico per moduli che richiedono il CLR (moduli gestiti ).

Richter, Jeffrey (2010-02-05). CLR via C# (Posizioni Kindle 1628-1629). OReilly Media - A. Edizione Kindle.

Anche l'immagine mostra chiaramente che i Moduli hanno solo Metadata non PE32 (+), intestazioni CLR, ecc. Pensi che Manifest e Metadata possano essere usati in modo intercambiabile

E potresti anche spiegare ** Tabelle manifest nei Moduli?

risposta

6

Quello che hai postato è un po 'timido di esattamente come un assembly gestito è incorporato in un file PE32. È un formato molto flessibile, originariamente pensato per archiviare codice e risorse eseguibili nativi, ma abbastanza flessibile da archiviare anche i dati. Che è davvero ciò che un assembly è dal punto di vista di Windows. Solo il CLR può trasformare quei dati in qualcosa di eseguibile.

Un file PE32 contiene più del semplice assemblaggio. Vi è in realtà anche un codice nativo. 5 byte per assembly puramente gestiti. Ha un'istruzione di salto in mscoree.dll, il bootstrapper per il codice gestito. Un EXE contiene un salto a _CorExeMain, una DLL contiene un salto a _CorDllMain. Questo è ulteriormente esteso per gli assembly in modalità mista, System.Data.dll e PresentationCore.dll sono esempi di quelli. Dispongono di grandi blocchi di codice nativo, codice che è racchiuso da classi gestite. Il compilatore e il linker C++/CLI è il modo per creare assiemi del genere. La sezione .text contiene il codice, la sezione .reloc contiene informazioni di rilocazione che aiutano a caricare una DLL in un indirizzo arbitrario in memoria.

La maggior parte dei file PE32 contiene anche risorse non gestite. Un formato che Windows comprende. Questo è memorizzato nella sezione .rsrc. Il compilatore C#, ad esempio, crea automaticamente le risorse lì, qualcosa che puoi sovrascrivere con l'opzione/win32res. Puoi vederlo con File + Apri + File e selezionare un assieme. Ce ne sono tre importanti:

  • RT_MANIFEST, contiene un manifest con ID risorsa 1. Ecco ciò che Windows deve capire che un programma C# è compatibile con UAC. Puoi creare il tuo manifest aggiungendo un file manifest dell'applicazione al progetto.
  • ICON, contiene un'icona selezionata come icona predefinita per un collegamento sul desktop
  • Versione, contiene una risorsa versione non gestita. Visibile nel foglio delle proprietà Dettagli Explorer, sintetizzato dal compilatore dagli attributi dell'assieme in AssemblyInfo.cs

Dumpbin.exe è uno strumento per sbirciare all'interno di un file PE32. Sfortunatamente conosce le assemblee gestite in modo da non poter vedere tutto.

7

libro di Richter è grande, ma la "verità" è definito nella ECMA CLI standard.
consultare il capitolo 5 "Termini e definizioni" per la definizione secondo lo standard ufficiale.
Penso che capirai meglio i punti in comune e le differenze tra i diversi termini quando guardi solo le definizioni lì.

+0

Collegamento piacevole. Grazie. – Tarik