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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [resuelto] Ayuda con GetProcAddress
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [resuelto] Ayuda con GetProcAddress  (Leído 3,315 veces)
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
[resuelto] Ayuda con GetProcAddress
« en: 27 Noviembre 2012, 02:02 am »

hola a todos,

llevo toda la tarde con un problema que no consigo resolver y ojala alguien pueda arrojarme un poco de luz. se que podria resumir este codigo en pocas lineas usando directamente LoadLibrary pero la idea es jugar un poco para intentar entender todo lo que pasa.

la idea es que ejecuto un exe y este busca la direccion de LoadLibraryA en la dll Kernel32, para luego crear un hilo pasandole como funcion principal el puntero a LoadLibraryA y como parametro una dll creada por mi. en esta dll hay una callback function donde solo tira un messagebox, y luego otra funcion que es la que intento ejecutar despues, y es aqui donde esta el problema. el messagebox me lo tira bien, pero luego cuando intento obtener la direccion de MyFunction me tira el error de "Could not retrieve the address function".

en fin, este es el codigo de mi dll:

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. BOOL APIENTRY DllMain (HINSTANCE hInstDLL, DWORD reason, LPVOID reserved) {
  5.  
  6. BOOL dllSuccess = FALSE;
  7.  
  8. if (reason == DLL_PROCESS_ATTACH) {
  9. dllSuccess = MessageBox (NULL, "Funciona! :)", NULL, MB_OK);
  10. }
  11.  
  12. return dllSuccess;
  13. }
  14.  
  15. __declspec(dllexport) void __stdcall MyFunction (void) {
  16.  
  17. printf ("Hello world!\n");
  18. }
  19.  

y el siguiente codigo es el del ejecutable:

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int main (int argc, char **argv) {
  5.  
  6. HMODULE hKernel32 = GetModuleHandle ("Kernel32");
  7. FARPROC lpLoadLib = GetProcAddress (hKernel32, "LoadLibraryA");
  8.  
  9. HANDLE hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) lpLoadLib, (void*) argv[1], 0, NULL);
  10. WaitForSingleObject (hThread, INFINITE);
  11.  
  12. DWORD hLibModule=0;
  13. GetExitCodeThread (hThread, &hLibModule);
  14. if (!hLibModule) {
  15. fprintf (stderr, "ERROR: Could not retrieve the module handle.\n");
  16. return 1;
  17. }
  18.  
  19. FARPROC myFunc = GetProcAddress ((void*) hLibModule, "MyFunction");
  20. if (!myFunc) {
  21. fprintf (stderr, "ERROR: Could not retrieve the function address.\n");
  22. return 1;
  23. }
  24.  
  25.        myFunc();
  26. CloseHandle (hThread);
  27. return 0;
  28. }

y eso es todo... alguien puede ayudarme?

muchas gracias!

edito: perdonad cometi un error, mi problema no es con esa funcion sino con la de GetProcAddress del final. llevo demasiado rato metido en esto y pasa lo que pasa... xD


« Última modificación: 27 Noviembre 2012, 19:05 pm por xiruko » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Ayuda con GetProcAddress
« Respuesta #1 en: 27 Noviembre 2012, 08:59 am »

Te esta diciendo claro que no pudo obtener la direccion de la funcion, verifica que tu funcion sea exportable y que se encuentre.
y usa GetLastError despues de Getprocaddress, con eso sabras cual es tu problema.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con GetProcAddress
« Respuesta #2 en: 27 Noviembre 2012, 12:28 pm »

Usa WinDbg y asegurate que hLibModule sea la direccion base de tu DLL, si eso es correcto comproba tus funciones exportadas con: Dependency Walker.

PD. Todo lo del hilo es una perdida de tiempo y cuando uno tiene un problema lo logico es reducirlo a la minima expresion.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
[resuelto] Ayuda con GetProcAddress
« Respuesta #3 en: 27 Noviembre 2012, 19:04 pm »

Citar
Te esta diciendo claro que no pudo obtener la direccion de la funcion, verifica que tu funcion sea exportable y que se encuentre.
y usa GetLastError despues de Getprocaddress, con eso sabras cual es tu problema.

hasta ahi llego, ese aviso lo he escrito yo xD y gracias por lo de GetLastError, lo he usado en varios sitios y no se por que no se me ocurrio usarlo aqui.

Citar
Usa WinDbg y asegurate que hLibModule sea la direccion base de tu DLL, si eso es correcto comproba tus funciones exportadas con: Dependency Walker.

perfecto gracias, no sabia con que herramientas podia ver eso. ahora me pondre con ello.

un saludo y duda resuelta!
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [resuelto] Ayuda con GetProcAddress
« Respuesta #4 en: 27 Noviembre 2012, 19:51 pm »

hasta ahi llego, ese aviso lo he escrito yo xD y gracias por lo de GetLastError, lo he usado en varios sitios y no se por que no se me ocurrio usarlo aqui.

Y entonces porque escribiste eso entonces? es porque GetProcAddress te devuelve el valor esperado? o simplemente lo
escribiste por escribir algo.
En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: [resuelto] Ayuda con GetProcAddress
« Respuesta #5 en: 27 Noviembre 2012, 22:58 pm »

Citar
Y entonces porque escribiste eso entonces? es porque GetProcAddress te devuelve el valor esperado? o simplemente lo escribiste por escribir algo.

lo escribi pues para que el programa me avisara de si hay algun fallo, y vale, sabia que GetProcAddress fallaba, por eso lo puse aqui para ver si me podiais ayudar en ver por que fallaba. no se no entiendo tu pregunta la verdad, es como muy obvia xD

y ya probe lo de GetLastError y me devuelve 127 que corresponde a que no se pudo obtener la direccion del procedimiento. estoy informandome sobre windbg y sobre dependency walker para ver porque falla, asi que considero que el tema esta resuelto. si quieres decirme algo mas enviame un mp.

un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda GetProcAddress
Programación C/C++
naderST 4 2,425 Último mensaje 5 Marzo 2013, 03:38 am
por naderST
no logro invocar a getprocaddress en masm 64 bits
ASM
Belial & Grimoire 3 3,159 Último mensaje 6 Agosto 2013, 06:10 am
por Belial & Grimoire
(RESUELTO) Ayuda con una pijada C#
.NET (C#, VB.NET, ASP)
CodwarESP 2 1,989 Último mensaje 16 Enero 2015, 10:12 am
por CodwarESP
[Resuelto] Ayuda con algo de php
PHP
ElInquisidor 4 2,279 Último mensaje 18 Marzo 2015, 03:12 am
por ElInquisidor
Ayuda en vbs?(Resuelto)
Scripting
David8choceros8chounos 2 1,698 Último mensaje 3 Marzo 2017, 16:09 pm
por David8choceros8chounos
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines