Assembly e Managed Module
A plataforma .NET têm o seu conjunto de conceitos,
estruturas e técnicas. Neste texto eu descrevo sobre dois destes conceitos: Assembly
e Managed Module.
O texto descreve como estes dois conceitos são utilizados na
plataforma .NET para armazenar e distribuir os componentes que compõe os
softwares e recursos necessários aos mesmos.
Os exemplos de código/projetos citados neste texto foram
desenvolvidos e estão disponíveis para as seguintes tecnologias/ferramentas:
- .NET
Framework Version: v3.5
- C# Compiler Version : 3.5.21022.8
- C++/CLI
Compiler Version : 15.00.21022.08 for 80x86
- ILAsm
- ILDasm
- Visual Studio 2008 Team System
Criando Managed Module
A partir do código-fonte do seu aplicativo, as ferramentas
de compilação e de geração de arquivos, criam arquivos binários como resultado
destes processos. No Microsoft Windows, o formato de arquivo PE/COFF (Portable
Executable and Common Object File Format), é o padrão utilizado para os
arquivos do tipo EXE e DLL. Este formato é utilizado nas versões 32-bit e
64-bit dos sistemas operacionais da Microsoft. Os compiladores para a
plataforma .NET geram arquivos binários no formato de arquivo PE/COFF.
Na realidade o formato PE/COFF é uma versão modificada do
formato de arquivo COFF (Common Object File Format) do Unix. O PE/COFF foi implementado
a partir do Windows NT 3.1. Como o PE/COFF é um formato amplamente reconhecido
e utilizado, criar um novo formato de arquivo específico para o .NET não era viável
e por isto a plataforma .NET o utiliza mas inclui informações e estruturas que
são reconhecidas pelo CLR (Common Language Runtime). Estas estruturas e
informações não alteram as estruturas do formato PE/COFF e sim são extensões.
Portanto o arquivo ainda é reconhecido pelo sistema operacional como um arquivo
PE/COFF válido.
Com estas informações podemos agora descrever mais
detalhadamente o conceito de ManagedModule.
Managed Module
Q: Como são organizados fisicamente os códigos e recursos que utilizo
em meus softwares para a plataforma .NET ?
A: Os programas
escritos para o CLR – Common Language Runtime residem em Managed Modules. Os códigos compilados e os recursos que compõe o
software são armazenados em uma estrutura física (arquivo PE/COFF) descrita
como Managed Module. Em um Managed Module
é possível armazenar vários tipos de informação além do código CIL (Common Intermediate Language)
gerado pelo compilador.
Q: Mas o que é um Managed Module afinal?
Um arquivo no formato
PE/COFF (Portable Executable and Common Object File Format), cujo conteúdo pode
ser executado pelo CLR – Common Language Runtime.
Q: Sendo o Managed Module a forma como as informações são gravadas em
arquivo para que este seja executado, quais tipos de informação um Managed Module
pode armazenar?
A: Um Managed Module pode
ter em seu conteúdo:
·
Código
(CIL – Common Intermediate Language e native code).
·
Metadata
·
Resources
Código: O código
gerado pelos compiladores é transformado em CIL
(Common Intermediate Language) e armazenado no Managed Module. Um Managed Module
também pode armazenar código binário nativo, ou seja, específico para uma
arquitetura de processador.
Metadata:
Armazenam as descrições dos tipos definidos no Managed Module incluindo: nomes, relacionamentos de herança,
assinaturas de métodos, informações de dependência, descrições de estruturas
internas e assim por diante.
Resources: Os resources contêm dados estáticos e
somente para leitura como strings, arquivos de imagens e outros aspectos do
programa que não são armazenados como código
executável.
Para demonstrar como é um Managed Module há uma
solução de exemplo, que faz parte deste texto, com a seguinte organização:
|
Projetos
nas linguagens C++/CLI e C#
|
...
Exibição do post interrompida. Para ler conteúdo completo,
clique aqui