 |
MSIL - Microsoft Intermediate Language
Por: Caio Azevedo  | Publicado em: 14-02-2008 | Comentários: 0 | Acessos: 165 | Avaliação: (84) (?)
Minha proposta nesse espaço inicialmente seria de analisarmos a linguagem C#, sua sintaxe, implementações dos conceitos de orientação a objetos, etc. Para tal ,acredito que a implementação de programas console [aqueles que rodam no DOS], seja a melhor alternativa nesse primeiro momento. Sem dúvida o Visual Studio é uma ferramenta poderosíssima, mas tentaremos não fazer uso do mesmo, para uma maior intimidade com a linguagem, o compilador, suas ferramentas e as diversas técnicas de desenvolvimento que o ambiente nos permite. Uma ressalva ao editor de programas, onde o Visual Studio tem uma interface bastante agradável (destaque para identação e visual das linhas de código), no entanto para os mais nostálgicos o uso do Edit é bem vindo.
Pré-requisitos:
Para execução de um programa .Net. o mínimo necessário é a instalação do Framework, disponível para download no site da Microsoft. Uma vez instalado temos disponíveis os compiladores VB e C#, para nosso caso o programa csc [digite csc /? para maiores detalhes de compilação]. Caso tenhamos apenas o framework instalado seria interessante adicionar à variável de ambiente Path, o caminho do programa csc, se tivermos o Visual Studio instalado utilize a opção Visual Studio Command Prompt, dentre as ferramentas do VS.
Finalmente:
Bom pessoal, nada mais batido como primeira lição nos escritos de qualquer linguagem de programação que o conhecido "Hello Word" , pois bem, não faremos diferente, no entanto, utilizaremos desse programa para passarmos algumas informações importantes para o entendimento de qualquer programa C#. Faremos uma viagem pelo universo do MSIL, a mágica da Microsoft para que os programas sejam multiplataformas, independente de linguagem, seguros, versionados, etc. O MSIL, nada mais é que uma linguagem intermediaria gerada no processo de compilação do código fonte, assim ao final desse processo temos um código intermediário e dependente do runtime do Framework ao invés dos executáveis "independentes", até então gerado pelos compiladores [e ainda possível nos compiladores C++, e C# em situações especiais].
Esse código é formado por um conjunto de instruções em linguagem intermediária e por metadados, conhecido como MANISFESTO, onde temos descrito informações essenciais para execução do código, tais como definição de tipos, controle de versão [e ai o fim da terrível DLL HELL, ou incompatibilidade de versões], referencia à assemblies externos, dentre outras funcionalidades.
Esse formato do código, com dados e metadados, permite aos assemblies uma autodescrição o que dispensa a necessidade das antigas Type Libraries ou IDLs. Assim o próprio runtime do framework, localiza e obtém as informações necessárias para executar as instruções conforme preciso, tudo junto num mesmo lugar.
O processo de execução inicia-se com o runtime do Framework [o conhecido CLR], que carrega do código IL e o executa, como já dissemos, o código tem é gerenciado e seguro. No entanto, antes dessa execução o CLR, garante a validade do código para só então compilá-lo, gerando um código de fato executável compatível com o processador, através do just-in-time compiler [JITter] que é cacheado, e caso haja alteração no código fonte / IL o mesmo é atualizado. Durante a execução do código gerenciado, o mesmo recebe serviços como garbage collection [responsável pela uma "limpeza" periódica na memória], interoperabilidade com códigos não gerenciados, serviço de controle de versão, segurança, etc, ou seja nosso processo fica constantemente monitorando para garantir sua qualidade em performance, segurança, gerenciamento otimizado da memória e outras funcionalidades providas pelo Framework.
A seguir, analisaremos nosso programa, o compilaremos e analisaremos seu código intermediário.
Listagem 1 - Hello World
• using System; //Referenciando namespace System
• namespace iMasters //Definindo namespace iMasters
• {
• class hello //Definindo classe hello
• {
• public static void Main() //Função principal
• {
• for(int i=0;i<5;i++)
• Console.WriteLine("tBem-Vindo à coluna - C# e Tecnologias .NET!!!");
• }
• }
• }
Nada mais simples, um programa que exibe uma mensagem cinco vezes. Utilizando o velho notepad, salvemos um arquivo hello.cs. e vamos para o processo de compilação:
Compilando
csc hello.cs [Será gerado um "executável",hello.exe.]
Bom, como já dissemos, o código aparentemente é como outro qualquer, no entanto podemos visualizar seu IL através do utilitário ILDASM executado a partir do diretório onde temos nosso executável. Ildasm hello.exe
Na instrução, .assembly extern mscorlib ,temos uma referencia ao assembly externo, no caso, o mscorlib [mscoree.dll, usado pelo sistema operacional para carregar o executável "intermediário"]. O compilador insere alguns parâmetros para identificação e segurança como, por exemplo, .publickeytoken ,que é a identificação básica do assembly e .ver que corresponde à versão do mesmo.
Em seguida temos a seção .assembly, com seus parâmetros .hash , utilizado para garantir que o assembly referenciado não tenha sido modificado e .ver que representa a versão do nosso código, aqui não especificado, nas opções de compilação.
Finalmente temos a seção .module que identifica nosso assembly [hello.exe], aqui temos um MVID , que o identifica, e é regerado a cada compilação, informações de identificação e localização do arquivo físico.
Aqui já vemos nossos primeiros códigos MSIL, estamos diante do construtor de nossa classe, que a principio é executado para cada classe, podendo ou não ser modificado [maiores detalhes em artigos posteriores], interessante ressaltarmos a primeira linha, onde o atributo cil managed, o define como código gerenciável. As linhas IL_9999: são identificadores de instruções assembly, onde a primeira utiliza o opcode ldarg que carrega um argumento para pilha de execução, 0, indica o operador this, ou seja a própria classe, em seguida é feito uma chamada ao método System.Object e assim o controle é retornado ao método que o chamou.
Finalmente chegamos em nosso código propriamente dito. Mais uma vez vemos que o método é gerenciado pelo atributo cil managed. Aqui destaque para algumas diretivas: .entrypoint, que especifica Main como ponto de entrada do programa. A diretiva .maxstack que especifica o tamanho máximo na pilha para o método. Em seguida temos os códigos com as instruções do programa, destaque para ldstr que carrega uma string na pilha de execução, br.s, que desvia a seqüência de execução e blt.s, que desvia seqüência condicionalmente, call que faz uma chamada ao método estático System.ConsoleWriteLine e por fim o retorno ao método que iniciou o processo [no caso _CorExeMain da mscoree.dll].
É isso ai pessoal, temos uma referencia enorme de opcodes IL, que na verdade dificilmente precisaremos manipular [não que seja impossível], ainda assim acho válido entendermos o funcionamento dos nossos assemblies, e o interessante é que tudo no .NET funciona assim, seja uma o code-behind de uma página ASPX, um WebService, uma DLL no COM+, um aplicativo console, qualquer coisa [opa, menos os programas não gerenciados, que como já dissemos, podem ser codificados em C++, ou mesmo no nosso C#].
Até a próxima!
Avalie este artigo:
Current: 0 / 5 stars - 0 vote(s).
Fonte Artigos Gratuitos Online - Artigonal.com
Perfil o autor:Caio Azevedo é arquiteto de softwares, especialista em soluções corporativas nos ambientes intranet/internet. Graduado em Ciência da Computação, Mestrando da Escola Politécnica da USP. Certificações Microsoft [MCP, MCAD e MCSD .NET]. Gestor da célula Microsoft da Magna Sistemas Consultoria (www.magnasistemas.com.br).
|
Submeter artigos se tornou um dos meios os mais populares de gerar links de qualidade e tráfego para o seu site. CADASTRE-SE JÁ, É DE GRAÇA! |
|
Artigos Relacionados
Conspiração Cibernética Por: Mathias Gonzalez | 03/03/2008 | Informática Seu micro já travou hoje? Não estressa não! Isso acontecerá com todos nós pobres mortais que confiamos nestas "drogas" de máquinas que parecem ter sido programadas para nos tirar o sossego ou no mínimo nos viciar nelas.
O Porque E Como Do Siw Por: Ruben Zevallos Jr. | 08/03/2008 | Programação Já vi muitos projetos para Internet irem para o buraco, porque o ele teria muito dado dinâmico, relatórios etc, mas foi totalmente guiado por profissionais de design e não de sistemas.
Tags – O Que São Por: Ruy Miranda | 05/02/2008 | Web Design Para que você possa entender o que são as tags, vamos começar explicando o significado da palavra. Tag em inglês (a maioria das palavras na linguagem do computador são originadas do inglês) significa etiqueta, rótulo. E etiqueta é algo que colocamos em objetos, mercadorias, arquivos, etc. para nos ajudar na lida diária, para nos orientar.
A Personalidade, o Comportamento Dos Marginalizados E Suas Conseqüências Por: Adriano Martins Pinheiro | 22/07/2008 | Desigualdades Sociais A personalidade é composta por vários fatores ao longo da vida.
Uma pessoa é atualmente fruto do que foi construído anteriormente, ou seja, como foi construída sua personalidade.
O meio social, a família, as influências do grupo social, a educação e as experiências, integram-se na formação do indivíduo e influenciam seu comportamento por toda sua vida.
Meta Tags – O Que São Por: Ruy Miranda | 05/02/2008 | Web Design Meta é um prefixo que entra na composição de muitas palavras, como por exemplo, metabolismo, metabólito. (Não confundir com o substantivo meta, popular entre nós, e que, entre outras coisas, significa aquele espaço que fica entre três páus ou hastes, e onde os jogadores de futebol fazem os gols.) Quando se fala em "meta tags" o prefixo fica separado do substantivo tag.
Algumas Coisas Que Aprendi Para Obter Sucesso Por: Adriano Martins Pinheiro | 03/08/2008 | Carreira Tenha metas claras e objetivos bem definidos.
Não se perca em muitos pensamentos, sonhos e fantasias, a vida não é uma novela, não é um filme de Hollywood. Nada será tão fácil e tão espetacular como assistimos. A vida nos oferece dificuldades e imprevistos, temos que estar firmes e com caminhos bem traçados.
Meta Tags: Importância para os Mecanismos de Busca Por: Ruy Miranda | 05/02/2008 | Web Design Pode-se dizer que as meta tags são importantes para todos os mecanismos de busca. Elas já tiveram importância maior em um passado recente. A ordenação dos sites, principalmente nos diretórios, dependia muito das meta tags.
Por Que Aprender C++ ? Por: Basilio Miranda | 29/10/2008 | Tecnologia C++ é uma linguagem de propósito geral que pode ser utilizada para qualquer finalidade e em múltiplas plataformas
C++ é uma linguagem flexível, multiparadigma, que permite que se utilize tanto programação orientada a objetos como programação genérica
C++ é a linguagem de programação mais completa que já foi criada, sendo também, uma linguagem altamente expressiva e lógica. E por isso muitas das linguagens que foram criadas depois (Java, por exemplo) são, de algum modo, inspiradas por C++.
Últimos Programação artigos
Phpmyadmin - Administrando Tabelas Por: Amilcar Junior | 12/10/2008 Usado no gerenciamento de dados no MySQL administração de banco de dados e tabelas.
Vamos nessa matéria abordar o script phpMyAdmin , usado no gerenciamento de dados no MySQL. Para fazer o download da última versão, vá nesse link. Você precisa ter instalado em sua máquina o Servidor Apache, o PHP e o MySQL para usar o phpMyAdmin. Após seu download e tudo funcionando corretamente ...
Mysql - Contruindo Tabelas Por: Amilcar Junior | 12/10/2008 O uso direto do MySQL dentro do PhpMyAdmin construido tabelas.
Recordset - Dreamweaver Cs3 Por: Amilcar Junior | 12/10/2008 Uso de Recordset para ligar um banco de dados a uma página dinâmica no Adobe dreamweaver.
Segurança - Trocando A Porta Do Sql Server 2000 Por: Tulio Rosa | 24/05/2008 Existem várias configurações que podemos fazer para garantir a segurança do banco de dados, entre elas temos a opção de alterar a porta default utilizada nas conexões, fazendo isso somente as solicitações direcionadas a nova porta terão respostas, as demais receberão erros como se o banco não existisse.
Data Por Extenso Por: Yunis Carvalho | 15/04/2008 Vamos descrever como colocar a data por extenso em um site e o detalhe é que a data será atualizada automaticamente, de acordo com a data do sistema do servidor que está hospedado o site.
O Porque E Como Do Siw Por: Ruben Zevallos Jr. | 08/03/2008 Já vi muitos projetos para Internet irem para o buraco, porque o ele teria muito dado dinâmico, relatórios etc, mas foi totalmente guiado por profissionais de design e não de sistemas.
Um Pouco De Siw Por: Ruben Zevallos Jr. | 08/03/2008 Muitas pessoas já me perguntaram o que é SIW. SIW é a sigla de Sistemas com Interface Web. O SIW é o desenvolvimento de Sistemas normais utilizando a Interface Web, que tem diversas vantagens perante a interface gráfica normal
Como instalar e configurar o Php5 e o Apache Por: Alexandre Silveira | 21/02/2008 Este artigo trata sobre a instalação e configuração do php5 e o apache.
Mais artigos de Caio Azevedo
Especial sobre .Net Por: Caio Azevedo | 14/02/2008 | Programação Estamos a beira de uma revolução, a plataforma .Net é um fato, boa parte dos desenvolvedores seguirá esse caminho. Enquanto isso na “vida real” nos deparamos todo dia com a boa e velha formula: ASP, VB 6.0/COM+, JavaScript, SQL Server. E é nesse ambiente que tenho dedicado meu tempo nos últimos seis meses, e o que pretendo nesse espaço é compartilhar o que aprendemos nesse período.
Fundamentos teóricos sobre C# Por: Caio Azevedo | 14/02/2008 | Programação Partiremos dos fundamentos teóricos da tecnologia, e através de exemplos tentaremos prover soluções para as situações do nosso dia a dia. Seria interessante contar com a interatividade de vocês leitores com críticas e sugestões sobre os assuntos abordados.
Usando Namespaces profissionalmente Por: Caio Azevedo | 14/02/2008 | Programação O que a princípio aparenta ser mais um dos novos conceitos do .net, veremos que o mesmo tem muito a ser explorado, e assim faremos, tentando extrair todo o potencial dessa funcionalidade do Framework, além de aproveitarmos a oportunidade para analisar a diretiva using[Imports, seu correspondente no VB.NET].
Desmistificando as Classes Por: Caio Azevedo | 14/02/2008 | Programação A Linguagem C# é totalmente baseada no modelo de programação orientada à objetos, sendo assim, profundos conhecimentos em alguns de seus elementos principais são de fundamental importância para que possamos extrair o máximo do modelo/linguagem, sobretudo aqueles desenvolvedores acostumados com outros modelos tais quais, programação estruturada e orientada à eventos.
Problemas com modelos de aplicações web Por: Caio Azevedo | 14/02/2008 | Programação Em minhas recentes atividades como arquiteto de soluções .net, deparei em alguns clientes com uma situação no mínimo inusitada...
Exemplo de otimização de armazenamento de dados Por: Caio Azevedo | 14/02/2008 | Informática Esse artigo tem como objetivo propor a solução de um problema no qual deparamos com razoável freqüência, e se você ainda não o teve pela frente, provavelmente ainda o terá especialmente se você desenvolve aplicações comerciais.
|
 |