Jump to content
Sign in to follow this  
JCPrata

Problema no ildasm

Recommended Posts

JCPrata

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

Share this post


Link to post
Share on other sites
will09

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");

Share this post


Link to post
Share on other sites
JCPrata

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.