Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: naidmen en 13 Febrero 2017, 20:44 pm



Título: Alguien me explicaría que son estos codigos
Publicado por: naidmen en 13 Febrero 2017, 20:44 pm
Código
  1. string exe = "ELEXE";
  2.    HRSRC res=FindResource(NULL,exe.c_str(),RT_RCDATA);
  3.  
  4.    if(res==NULL)
  5.         cout << GetLastError();
  6.         cout << "\n";
  7.  
  8.    int size=SizeofResource(NULL,res);
  9.  
  10.    if( !size )
  11.        cout << 122; // Arbitrario. -> ERROR_INSUFFICIENT_BUFFER
  12.        cout << "\n";
  13.  
  14.    HGLOBAL hRes=LoadResource(NULL,res);

Llevo casi 6 meses en lenguaje C de forma independiente, ya he visto: pilas,colas listas enlazadas y doblemente enlazadas y aun no se que significan esos códigos. Y si es posible alguien me pasaría una guía que este desde el principio para poder entenderlos.



Título: Re: Alguien me explicaría que son estos codigos
Publicado por: Borito30 en 13 Febrero 2017, 20:53 pm
Código
  1. string exe = "ELEXE";
  2.    HRSRC res=FindResource(NULL,exe.c_str(),RT_RCDATA);
  3.  
  4.    if(res==NULL)
  5.         cout << GetLastError();
  6.         cout << "\n";
  7.  
  8.    int size=SizeofResource(NULL,res);
  9.  
  10.    if( !size )
  11.        cout << 122; // Arbitrario. -> ERROR_INSUFFICIENT_BUFFER
  12.        cout << "\n";
  13.  
  14.    HGLOBAL hRes=LoadResource(NULL,res);

Llevo casi 6 meses en lenguaje C de forma independiente, ya he visto: pilas,colas listas enlazadas y doblemente enlazadas y aun no se que significan esos códigos. Y si es posible alguien me pasaría una guía que este desde el principio para poder entenderlos.



son muy parecidos a los mios esto va mas orientado a windows que a c++ aunque uses codigo en c++.


Título: Re: Alguien me explicaría que son estos codigos
Publicado por: dato000 en 13 Febrero 2017, 21:17 pm
Código
  1. string exe = "ELEXE";
  2.    HRSRC res=FindResource(NULL,exe.c_str(),RT_RCDATA);
  3.  
  4.    if(res==NULL)
  5.         cout << GetLastError();
  6.         cout << "\n";
  7.  
  8.    int size=SizeofResource(NULL,res);
  9.  
  10.    if( !size )
  11.        cout << 122; // Arbitrario. -> ERROR_INSUFFICIENT_BUFFER
  12.        cout << "\n";
  13.  
  14.    HGLOBAL hRes=LoadResource(NULL,res);

Llevo casi 6 meses en lenguaje C de forma independiente, ya he visto: pilas,colas listas enlazadas y doblemente enlazadas y aun no se que significan esos códigos. Y si es posible alguien me pasaría una guía que este desde el principio para poder entenderlos.



Parece que va más de la mano con programación de windows, Visual C++

https://msdn.microsoft.com/es-es/library/windows/desktop/ms648042(v=vs.85).aspx

Sin conocer mucho la libreria, intentare traducir y explicar en lo que puede consistir esos recursos:

Citar
HRSRC WINAPI FindResource(
  _In_opt_ HMODULE hModule,
  _In_     LPCTSTR lpName,
  _In_     LPCTSTR lpType
);

En el que:

Citar
Parameters

hModule [in, optional]
Type: HMODULE
A handle to the module whose portable executable file or an accompanying MUI file contains the resource. If this parameter is NULL, the function searches the module used to create the current process.

Maneja el modulo en el que un archivo ejecutable o un archivo MUI contiene el recurso solicitado. Si el parametro es NULL, la función busca un un modulo que es creado al momento de crearse el proceso actual.


lpName [in]
Type: LPCTSTR
The name of the resource. Alternately, rather than a pointer, this parameter can be MAKEINTRESOURCE(ID), where ID is the integer identifier of the resource. For more information, see the Remarks section below.

Es el nombre del recurso, puede ser un apuntador, o puede ser un ID, en ID es un valor entero para identificar el recurso.


lpType [in]
Type: LPCTSTR
The resource type. Alternately, rather than a pointer, this parameter can be MAKEINTRESOURCE(ID), where ID is the integer identifier of the given resource type. For standard resource types, see Resource Types. For more information, see the Remarks section below.

Es el tipo del recurso, puede ser un apuntador, o puede ser un ID, en ID es un valor entero para identificar el recurso.


Creeria que tienes un pequeño ejemplo, pueden encontrarse más claro, pero en ingles.

https://vctipsplusplus.wordpress.com/tag/findresource-call-is-failing-in-dll/
http://www.cplusplus.com/forum/general/54255/
https://www.codeproject.com/Questions/80910/FindResource-failing-to-return-handle
http://stackoverflow.com/questions/9646752/findresource-fails-to-find-data-even-though-data-is-in-exe
http://stackoverflow.com/questions/5807554/findresource-fails

Ahora, dependiendo de lo que necesites, pues tendrás que amoldar el ejemplo, pero bueno, básicamente lo veo de esta manera.

1) Instanciar un Objeto tipo HRSRC (ejm --> res)
2) Asignar ese objeto tipo HRSRC el metodo a ejecutar FindResource
3) FindResource Necesita: Un objeto tipo HMODULE, un ID donde se encuentre un recurso, y el tipo de referencia que tiene ese recurso.
4) SizeofResource y LoadResource son parecidas, necesitan el objeto HRSRC.

Se que es algo muy ambiguo, pero realmente se necesitaria estudiar a fondo Visual C++ y el funcionamiento del metodo, estudiando la libreria que lo contiene.

Espero que sirva de algo.