Artigonal.com - Leia e Publique Artigos
Diretório de Artigos Gratuitos
01.12.2008 Login Cadastro Olá
E-mail:
Senha:
Salve meus dados neste computador 


MSIL - Microsoft Intermediate Language

Por: Caio Azevedo Ranking do Autor Azul | Publicado em: 14-02-2008 | Comentários: 0 | Acessos: 165 | Avaliação:  (84) Ranking do Artigo Azul (?)

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).

Tags do Artigo: Microsoft, Programação, Msil

Fonte Artigos Gratuitos Online - Artigonal.com

Imprima este Artigo Imprimir artigo   Envie o Artigos a um amigo Enviar a um amigo   Publique este Artigo no seu site Publique este Artigo   Mande mensagem ao Autor Mensagem ao autor  
Caio AzevedoPerfil 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!

Comentários

Comente este artigo Comente este artigo
Nome
E-mail:
Comentário
Digite o código de segurança: Captcha


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.

Categorias do Artigo





Webmasters

Leitor de RSS
RSS
Links

Business Info

Anunciar