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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cargar función de una DLL solo con la dirección de memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cargar función de una DLL solo con la dirección de memoria  (Leído 2,029 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Cargar función de una DLL solo con la dirección de memoria
« en: 3 Mayo 2018, 14:25 pm »

Como puedo llamar a una función de una DLL de Windows sabiendo su dirección estática?

Por ejemplo:
Código
  1. HMODULE dll = LoadLibraryA("comDlg32.dll");
  2. if (dll == 0){
  3. printf("Failed to load Library");
  4. exit(1);
  5. }
  6. PGetOpenFileName AGetOpenFileName = (PGetOpenFileName)GetProcAddress(dll, "GetOpenFileNameW");
  7. GetProcAddress(dll, "GetOpenFileNameW");
  8. if (AGetOpenFileName == 0){
  9. printf("Failed to load function");
  10. exit(1);
  11. }

El codigo anterior funciona. Con DLL Export Viewer obtengo la direccion de la funcion y pense en algo asi:

Código
  1. PGetOpenFileName AGetOpenFileName = (PGetOpenFileName)0x000000018004dfc0;

Pero me salta con infracción de memoria.

Pistas?

Un saludo


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cargar función de una DLL solo con la dirección de memoria
« Respuesta #1 en: 3 Mayo 2018, 15:52 pm »

Creo que el S.O. no te permite salirte del marco de memoria de tu programa.


En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Cargar función de una DLL solo con la dirección de memoria
« Respuesta #2 en: 3 Mayo 2018, 17:17 pm »

No creo que esa sea la dirección, porque date cuenta que cada vez que ejecutas el programa la dll no es alojada en el mismo sitio. Quizás si se podría tomar el puntero de la dll y sabiendo el desplazamiento extraer el puntero que apunte a la función usando aritmética de punteros...

... he buscado en Google y voilá es así como te digo. Échale un vistazo a esta recreación de GetProcAddress()... (no es el código original puesto que el API de Windows es de código cerrado)

https://github.com/arbiter34/GetProcAddress/blob/master/GetProcAddress/GetProcAddress.cpp
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
imprimir los bits que hay en una direccion de memoria « 1 2 »
ASM
lapras 11 10,812 Último mensaje 4 Diciembre 2009, 16:26 pm
por Yurix
[Solucionado] Cargar DLL a memoria « 1 2 »
.NET (C#, VB.NET, ASP)
seba123neo 13 12,234 Último mensaje 17 Septiembre 2010, 15:09 pm
por [D4N93R]
Obtener direccion de funcion
Programación C/C++
Vaagish 6 3,523 Último mensaje 7 Mayo 2015, 19:17 pm
por Vaagish
Frame y dirección de memoria.
Programación C/C++
LaiaxanIV 2 1,724 Último mensaje 1 Abril 2016, 19:26 pm
por LaiaxanIV
[Guía] Cargar DLL de memoria
Programación General
Yuki 0 2,286 Último mensaje 6 Agosto 2017, 05:10 am
por Yuki
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines