JCPrata Posted March 10, 2006 at 04:34 PM Report #17665 Posted March 10, 2006 at 04:34 PM 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 😄 ? Ou posso importar esta ferramenta para o path correcto? Se posso onde se encontra a ferramenta? Obrigado
will09 Posted March 18, 2006 at 10:40 AM Report #18656 Posted March 18, 2006 at 10:40 AM 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");
JCPrata Posted March 18, 2006 at 01:03 PM Author Report #18669 Posted March 18, 2006 at 01:03 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now