Error 126: LoadLibrary falla C++

Iniciado por Kaxperday, 15 Enero 2016, 15:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Buenas, resulta que necesito cargar unas librerías de firefox de su path de instalación para intentar hacer un password recovery y comprobar que funciona.

El problema me lo da al tratar de cargar cualquiera de sus librerías:

Código (cpp) [Seleccionar]

HMODULE LoadLibrary2(char *libDir, char *libName){

char loadPath[MAX_PATH] = { 0 };
HMODULE tmpLib = NULL;

strcpy(loadPath, libDir);
strcat(loadPath, "\\");
strcat(loadPath, libName);

if (!strcmp(libName, "nss3.dll")) {
tmpLib = LoadLibraryA(loadPath);
}
else if (!strcmp(libName, "plc4.dll")) {
tmpLib = LoadLibraryA(loadPath);
}
else {
tmpLib = LoadLibraryA(loadPath);
}

if (NULL == tmpLib) {
printf("Failed to load library %s, code %d\n", libName, GetLastError());
return NULL;
}

printf("%s loaded successfuly\n", libName);

return tmpLib;
}


Para cargar a cualquier librería de FF se llama esta función, el caso es que LoadLibrary devuelve HMODULE = NULL, entonces llamo a GetLastError() y me devuelve 126 error.

En mi caso el error es:

CitarERROR_MOD_NOT_FOUND

   126 (0x7E)

   The specified module could not be found.


Que el módulo no puede ser encontrado, algo extraño ya que las librerías dinámicas están en el path correcto con el que llamo a la función y además utilizo permisos de administrador.

He probado a copiar y pegar la librería nss3.dll a el directorio en ejecución y daba el mismo error.

¿Qué puede ser?, un saludo.

Edito: Bueno, el código es muy cuestionable, no es mío y lo acabaré retocando entero pero primero saber porque no carga la dll, porque no funciona LoadLibrary.

La llamada a la función LoadLibrary tiene como argumento por ejemplo:

"C:\Program Files (x86)\Mozilla Firefox\nss3.dll", obviando que si lo escribimos como cadena sería con dos '\' para que se muestren.

Saludos.

OJO: Me acabo de dar cuenta que en el código añade en la cabecera "utils.h", no se que tendrá ese archivo pero igual tiene algo que ver con esto.

Utilizo también LoadLibraryA pero y si el path tiene caracteres multybyte? MMmm, no creo que tenga que ver, pero puede que en otra situación pueda causar problemas.

No sé, compila sin errores.. solo eso de la librería.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eternal Idol

#1
A mi me falla y me dice que depende de otra DLL (mozglue.dll) que no es capaz de encontrar:
http://flashexperiments.insh-allah.com/ApacheError126.html

Si lo ejecuto desde el path del Firefox carga.




Pasando el directorio del Firefox a SetDllDirectory en el main funciona.
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

Kaxperday

#2
Eyyy muy buena eternal idol!!!

Distes en el clavo socio, ahora si que me cargan las librerías, desconocía esa función, pero de ahora en adelante me será útil, estoy seguro.

Sin embargo, en el código que tengo viejo de hace 3 años, hace password recovery de FF en su versión 10.0. Ahora anda por la versión 43 y ha modificado librerías y demás, es por ello que ya no están las mismas librerías que antes, el el FF 10 había que cargar estas librerías:

Código (cpp) [Seleccionar]

// Create a list of libraries (in order of dependency)
char* libList[] = { "mozglue.dll", "nspr4.dll", "plc4.dll", "plds4.dll",
"nssutil3.dll", "mozsqlite3.dll", "softokn3.dll", "nss3.dll", NULL
};


Ahora no se cuales habrá que cargar, pero confío en funcione con las mismas funciones, sino el trabajo se va a alargar mucho, probaré de primeras a cargar todas las dll del directorio e intentar ejecutar el programa, de todas maneras FF según se dice es de código abierto, pero bien que estoy buscado su código y no hay manera, me lleva a un servidor FTP y no carga nada.

https://developer.mozilla.org/es/docs/Descargar_el_c%C3%B3digo_fuente_de_Mozilla

El caso es que no hay rastro de su código de ninguna versión como para encontrar el código de la version 43.0 ... :"(

Saludos y a probar.

Edito: Bueno, parece que no va a funcionar, según leo desde la versión 32 FF guarda sus contraseñas de login en "logins.json" otro archivo nuevo, y desde esa versión hasta ahora utiliza ese archivo, y como es de esperar no será el único cambio, seguramente utilice diferentes encriptaciones y demás, si tuviera el código quizás pudiera hacer algo, un saludo.

Edito: Según he podido ver en el archivo este logins.json aparece la url tipo de autentificación y demás en texto plano, excepto el usuario y la contraseña, que están encriptadas con las librerías de FF. También al estar en AppData hay bases de datos de anteriores versiones de FF que se quedaron ahí perdidas, como signons.sqlite.

En fin esto de hacer un password recovery o lo sabes hacer y tienes constumbre y te lleva poco tiempo, o realmente no te merece la pena porque no paran de cambiar cada poco tiempo la forma de almacenar los datos en el archivo de logins, requiere mucho mantenimiento.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.