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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como quitar el decorado de symbolos en clases exportadas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: como quitar el decorado de symbolos en clases exportadas  (Leído 6,106 veces)
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: como quitar el decorado de symbolos en clases exportadas
« Respuesta #10 en: 10 Octubre 2011, 00:36 am »

eso me confunde porque mi clase ni siquiera usa constructor, es decir no lo defini........... y por otro lado es una clase con propiedades y metodos que la idea es que sea modificada por una funcion externa. entonces vos creas un objeto y se lo pasas a esa funcion y esta lo modifica.

estas son algnas de las citas del tutorial del hack

Citar
//The list contains the virtual memory address of the functions Add, Sub, GetLastUsedFunc and the constructor.

//Since we obtained the block of memory, we have to call the constructor to initialize the block of memory.
//So, we get the relative virtual address of the constructor in the DLL.

//Since we have the address of the constructor, we have to explicitly call it to initialize the
//block of memory obtained by malloc.

//Yes, but how do we associate an object for the constructor?

//If you remember, when any member function is called, including the constructor,
//the address of the object gets quietly passed to the called function and this address is stored in the stack.
//On an Intel based machine, this address of the object is pushed onto the stack via the ECX register.
//So, if you create a class and call its member function, the ECX register contains the 'this' pointer.
//This screen shot should make things clearer.

//acerca del bloque reservado con malloc..
//since we already have the address of a block of memory (that will in the future be an object),
//we move this address into the ECX register by using the Visual C++ inline assembler syntax:
//__asm { MOV ECX, pCCalc }

//Since we have already obtained the address of the constructor, we just say:
//pCtor ();

//When your function pointer pCtor() returns from the DLL,
//it would have initialized the object of the class contained in the DLL.

entiendo para que necesita llamar al constructor en este caso, pero en mi caso no entiendo porque deberia llamarlo. si pudieras explicarme la razon de tener que agregar un constructor explicito en mi clase y llamarlo en el EXE  :-\ por que todavia no entiendo el motivo

en el EXE yo solo quiero crear un objeto en el winmain de esta forma:

winmain()
{
       Datos dat;

       //y pasarselo a esta funcion importada de la DLL
      pFuncionQueUsaUnParametroDeClaseDatos(dat);
}

la funcion exportada de la dll luseria algo asi
Código:
EXPORT void FuncionQueUsaUnParametroDeClaseDatos( Datos &dat )
{
      /* modifica el objeto, lo inicializa y le asigna valores a sus miembros (propiedades) */

     dat.setValorA(5);//ejemplo
}

y la funcion  lo que haria seria modificar el objeto, osea darle valores y eso. entonces para esta caso aunque no sea como el del hack tambien necesitaria hacer lo del bloque de memoria con malloc y llamar al constructor ?






« Última modificación: 10 Octubre 2011, 00:43 am por dewolo » 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: como quitar el decorado de symbolos en clases exportadas
« Respuesta #11 en: 10 Octubre 2011, 02:07 am »

No ... pero si tenes propiedades a menos que uses un metodo para inicializarlas a sus valores por defecto seguramente vas a tener problemas ...


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
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: como quitar el decorado de symbolos en clases exportadas
« Respuesta #12 en: 10 Octubre 2011, 02:56 am »

fijate tu pm por favor  ;D


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: como quitar el decorado de symbolos en clases exportadas
« Respuesta #13 en: 10 Octubre 2011, 16:03 pm »

Aca esta el metodo ideal que equivale a COM: "C++ Mature Approach: Using an Abstract Interface"

DLL con una funcion exportada para crear el objeto:
Código
  1. #include <windows.h>
  2.  
  3. BOOL APIENTRY DllMain (HANDLE, DWORD, LPVOID)
  4. {
  5.    return TRUE;
  6. }
  7.  
  8. class Datos
  9. {
  10. public:
  11. Datos();
  12. virtual void setVALOR(int v);
  13. virtual int getVALOR();
  14. virtual void Release();
  15.  
  16. private:
  17. int VALOR;
  18. };
  19.  
  20. Datos::Datos()
  21. {
  22. VALOR = 0;
  23. }
  24.  
  25. void Datos::setVALOR(int v)
  26. {
  27. VALOR = v;
  28. }
  29.  
  30. int Datos::getVALOR()
  31. {
  32. return VALOR;
  33. }
  34.  
  35. void Datos::Release()
  36. {
  37. delete this;
  38. }
  39.  
  40. extern "C" __declspec(dllexport)  Datos *newDatosObject()
  41. {
  42. return new Datos;
  43. }

Ejecutable con clase abstracta, Datos es una caja negra y llamamos a la funcion para crear el objeto (que destruimos con el metodo Releaes indirectamente):
Código
  1. #include <windows.h>
  2. #include <cstdio>
  3.  
  4. class Datos
  5. {
  6. public:
  7. virtual void setVALOR(int v) = 0;
  8. virtual int getVALOR() = 0;
  9. virtual void Release() = 0;
  10. };
  11.  
  12. int main()
  13. {
  14. HMODULE hMod = LoadLibrary(TEXT("graphics.dll"));
  15. if (hMod)
  16. {
  17. typedef Datos* (*newDatosObject_ptr)();
  18. newDatosObject_ptr newDatosObject = (newDatosObject_ptr)GetProcAddress(hMod, "newDatosObject");
  19. Datos *pDatos = newDatosObject();
  20. if (pDatos)
  21. {
  22. int x = pDatos->getVALOR();
  23. printf("%d\r\n", x);
  24. pDatos->setVALOR(x + 34);
  25. x = pDatos->getVALOR();
  26. printf("%d\r\n", x);
  27.  
  28. pDatos->Release();
  29. }
  30. FreeLibrary(hMod);
  31. }
  32.  
  33. return 0;
  34. }
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
dewolo

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: como quitar el decorado de symbolos en clases exportadas
« Respuesta #14 en: 10 Octubre 2011, 16:20 pm »

osea la DLL tiene un solo export que equivale al objeto completo y en el EXE solo haces esto
"Datos *pDatos = newDatosObject();" y ya lo tenes  :xD



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: como quitar el decorado de symbolos en clases exportadas
« Respuesta #15 en: 10 Octubre 2011, 16:21 pm »

Exactamente, por eso en el primer mensaje te puse si habia alguna razon para no hacer esto, es lo mejor por lejos  ;D
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
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como compilar clases por separado [?]
Programación C/C++
.:BlackCoder:. 1 4,800 Último mensaje 28 Abril 2010, 05:42 am
por Littlehorse
¿Como acceder a otras clases en qt?
Programación C/C++
ApOkAlizE 7 4,333 Último mensaje 2 Septiembre 2011, 15:01 pm
por ApOkAlizE
borde de un div decorado...
Desarrollo Web
Kase 2 2,866 Último mensaje 15 Noviembre 2012, 09:28 am
por Kase
[SOURCE] SQL Optimizer - Limpie las Strings mal exportadas en sus archivos .sql
.NET (C#, VB.NET, ASP)
z3nth10n 0 1,479 Último mensaje 4 Agosto 2013, 00:18 am
por z3nth10n
Problema en jQuery - añadir y quitar clases a la vez
Desarrollo Web
Ali Baba 3 3,222 Último mensaje 20 Octubre 2017, 22:20 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines