elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [Solucionado] Cargar DLL a memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Cargar DLL a memoria  (Leído 12,264 veces)
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Cargar DLL a memoria
« Respuesta #10 en: 17 Septiembre 2010, 01:14 am »

te parece mal si te pido que subas el proyecto con el codigo ?


En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Cargar DLL a memoria
« Respuesta #11 en: 17 Septiembre 2010, 05:05 am »

Lo subo mañana temprano en este mismo post, voy de salida. !


En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Cargar DLL a memoria
« Respuesta #12 en: 17 Septiembre 2010, 06:48 am »

LISTOOOOOOOOOO  ;D ;D ;D , (paresco uno que recien empieza a programar y le sale el primer hola mundo jaja)

de tanto ver ejemplos comenze a ver como funciona realmente, puede que antes no lo tenia claro.

el error que estaba cometiendo es hacerlo en un formulario, o sea en el Load o el constructor del form, se ve que ahi no anda, porque el diseñador de windows forms lo carga antes de que yo haga la carga del assembly.

lo puse en un modulo con un Sub Main y funciona perfecto.

aclaro para el que no sabe que el evento AssemblyResolve se ejecuta cuando el programa no encuentra una dependencia, entonces ahi dentro del evento le podemos decir de donde sacar el assembly, si se lo pasamos mal obviamente se produce una excepción y se termina el programa.

como vos decias hay que usar el args.Name que devuelve la info del assembly que esta referenciado y no lo encuentra, este retorna el nombre de la libreria, la version, la cultura y el keytoken, algo asi:

Código
  1. System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

entonces el codigo final queda asi:

Código
  1. Imports System.IO
  2. Imports System.Reflection
  3.  
  4. Module Module1
  5.    Sub Main()
  6.        AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf CargarLibreriaMemoria
  7.  
  8.        Application.EnableVisualStyles()
  9.        Application.Run(Form1)
  10.    End Sub
  11.  
  12.    Private Function CargarLibreriaMemoria(ByVal sender As Object, ByVal args As ResolveEventArgs) As Assembly
  13.  
  14.        Dim vNombre As String = args.Name.Substring(0, args.Name.IndexOf(","))
  15.  
  16.        Dim vStream As Stream = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1." & vNombre & ".dll")
  17.        Dim vBuffer As Byte() = New Byte(vStream.Length - 1) {}
  18.  
  19.        vStream.Read(vBuffer, 0, vBuffer.Length)
  20.  
  21.        Dim vLibreria As Assembly = Assembly.Load(vBuffer)
  22.  
  23.        Return vLibreria
  24.    End Function
  25. End Module

con eso lo que hago es solo sacar el nombre del ensamblado que esta antes de la primer coma, o sea:

System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

y listo con eso funciona...

obviamente debemos reemplazar WindowsApplication1 por el nombre de nuestro programa, yo lo puse asi fijo para ponerlo nomas, se puede averiguar desde codigo tambien.

si alguno quiere ver los nombres de los ensamblados que usa el programa lo puede ver asi:

Código
  1.        For Each asm As Assembly In AppDomain.CurrentDomain.GetAssemblies()
  2.            Dim name As String = asm.FullName.Substring(0, asm.FullName.IndexOf(","))
  3.        Next

gracias por tu tiempo [D4N93R] , decime tu nombre porque no me gusta llamar por nick  ;D

saludos.
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Cargar DLL a memoria
« Respuesta #13 en: 17 Septiembre 2010, 15:09 pm »

Que bueno que resolviste!, justo iba  subirte el proyecto.

El problema era que estabas haciendo el AssemblyResolve en la clase del form? AAAAAAAAAAA, my bad! yo lo hacía en la clase Program, entonces claro, fallala referencia antes de que pudieses subcribirte al evento  :xD

Pero bueno, mucho mejor que lo hayas resuelto solo, así se aprende mucho más, el framework todo es así, muy poderoso pero hay que entenderlo bien.

Un tip: puedes usar GetManifestResourceNames() en la clase assembly para obtener todos los recursos dentro del assembly, sea mediante Assembly.GetExecutingAssembly() o por cualquier carga (Load) de assemblies.

Un saludo.

PD: Juan.  ;D

En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cargar bytes de la memoria de un proceso en un textbox...
Programación Visual Basic
jonniemaxxx 4 3,002 Último mensaje 10 Septiembre 2011, 01:26 am
por Hasseds
Problema al cargar paginas de internet (Solucionado)
Redes
villeparamio 0 3,742 Último mensaje 3 Diciembre 2012, 16:50 pm
por villeparamio
Cargar dll desde memoria o disco - fuente
Análisis y Diseño de Malware
Borito30 0 2,546 Último mensaje 13 Noviembre 2016, 22:32 pm
por Borito30
[Guía] Cargar DLL de memoria
Programación General
Yuki 0 2,312 Último mensaje 6 Agosto 2017, 05:10 am
por Yuki
Cargar función de una DLL solo con la dirección de memoria
Programación C/C++
patilanz 2 2,053 Último mensaje 3 Mayo 2018, 17:17 pm
por srWhiteSkull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines