• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JCPrata

Problema no ildasm

3 mensagens neste tópico

Boas,

Antes de mais queria dar os meus parabéns ao forúm que tem aqui, acabei de me registar a pouco, e vejo que pode ser uma grande ajuda a muitos programadores portugueses  :)

Bem entao o meu problema e o seguinte: eu acabei de compilar para código em C# para um .exe, e como quero visualizar o conteúdo de metadados e código IL existente no .exe, recorri a ferramenta ildasm, que faz o disassembly para código IL. Agora o meu problema é que ele diz que a ferramenta ildasm não existe ('ildasm' is not recognized as an internal or external command, operable program or batch file.), criar .exe eu consigo, criar .dll tb consigo, portanto ate agora a ferramenta ildasm é a única que nao existe. Como posso solucionar este problema? Tenho que reinstalar o visual studio de novo :D ? Ou posso importar esta ferramenta para o path correcto? Se posso onde se encontra a ferramenta?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Teoria:::

O Assembly é a unidade básica de deployment na plataforma .NET. Ele contém tipos, recursos, código, etc. Os Assemblies podem ser classificados em dois tipos: estáticos e dinâmicos. Os Assemblies estáticos são os Assemblies normais construídos pelos compiladores .NET e outras ferramentas como o ‘al’ (Assembly Linker). Uma vez construídos os Assemblies estáticos eles não podem ser alterados, embora possamos carregá-los dinamicamente ou criar tipos a partir deles, mas sua natureza é ainda estática.

Os Assemblies dinâmicos são construídos em tempo de execução e podemos acrescentar os conteúdos dinamicamente ou alterar os já existentes. Podemos também emitir o código IL diretamente no Assembly, normalmente isto acontece na memória, mas no fim nós podemos também persistir no Assembly dinâmico da mesma forma.

O sistema .NET fornece todos esses serviços no namespace System.Reflection.Emit. O System.Reflection.Emit contém várias classes que fornecem acesso ao código de emissão. Poe exemplo, a classe TypeBuilder é usada para definir dinamicamente o tipo; AssemblyBuilder é usado para construir e persistir no Assembly dinâmico, e assim por diante.

Isto foi pa ver se percebia o que era o IL!

e arranjei este codigo fonte pode ser que ajude.

AssemblyName name = new AssemblyName();
name.Name = "MyAsm";

AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);

// Obtém o módulo construtor
ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("MyModule", "MyAsm.dll");
      // Obtem o construtor do tipo
      TypeBuilder typeBuilder = modBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
            // Cria o construtor sem parâmetros
            ConstructorBuilder defctor = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new Type[0]);
                  ILGenerator ctorIlGen = defctor.GetILGenerator();
                        ctorIlGen.EmitWriteLine("Constructor Called");
                        ctorIlGen.Emit(OpCodes.Ret);
            
            MethodBuilder mBuilder = typeBuilder.DefineMethod("MyMethod", MethodAttributes.Public, typeof(void), new Type[0]);
                  ILGenerator ilgen = mBuilder.GetILGenerator();
                        ilgen.EmitWriteLine("Method Called");
                        ilgen.Emit(OpCodes.Ret);
      Type t = typeBuilder.CreateType();

object obj = Activator.CreateInstance(t);
// Chama obj.mymethod()
t.InvokeMember("MyMethod", BindingFlags.InvokeMethod, null, obj, null);
asmBuilder.Save("MyAsm.dll");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado,

O codigo IL e muito parecido com assembly, e o codigo intermedio que a plataforma .Net utilizar para que várias linguagens depois de compiladas nesta plataforma consigam comunicar entre si, costuma-se dizer que e um assembly object oriented.

Agora queria que a ferramenta ildasm funciona-se, para ver o código IL que se encontra no .exe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora