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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8
21  Programación / Programación C/C++ / oerador de ambito :: o doble dos puntos en: 10 Octubre 2011, 03:12 am
http://www.zator.com/Cpp/E4_9_19.htm
http://www.hackingballz.com/herramientas/manual-oficial-de-php/language.oop5.paamayim-nekudotayim.html

hola, mirando unos codigos mesurgio una duda sobre un operador que nunca me enseniaron completamente, es el doble dos puntos, por ejemplo en el compilador dentro del main si pongo
"::" sale un cartel con algunas opciones, pero en otros codigos mas precisamente en codigos de clases personalizadas, he visto como se llaman a funciones de windows usando ese operador, quisiera saber para que se hace esto, nunca lo supe  :-[
por ahi es algo tonto pero no me lo enseniaron  :¬¬



Uploaded with ImageShack.us

unos ejemplos que encontree

Código:
bool CAppGetReso::OnInit()
{
    //! Initialize all image handlers.
    ::wxInitAllImageHandlers();

    //~ Initialize all XRC handlers.
    wxXmlResource::Get()->InitAllHandlers();

    //~ Return true to continue processing.
    return(true);
}

Código:
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
::EnterCriticalSection(&lock);

if(idEvent == pTimer)
{
KillTimer(NULL, pTimer);
ResumeThread();

}

::LeaveCriticalSection(&lock);
}

otro ejemplo
Código:

class SimpleControl
{
public:
    SimpleControl (HWND hwndParent, int id)
        : _hWnd (GetDlgItem (hwndParent, id))
    {}

    void SetFocus ()
    {
        ::SetFocus (_hWnd);
    }

    // code is the HIWORD (wParam)
    static BOOL IsClicked (int code)
    {
        return code == BN_CLICKED;
    }

    HWND Hwnd () const { return _hWnd; }

    void Enable ()
    {
        EnableWindow (_hWnd, TRUE);
    }

    void Disable ()
    {
        EnableWindow (_hWnd, FALSE);
    }

    void SetFont (HFONT font)
    {
        SendMessage ( Hwnd (), WM_SETFONT, (WPARAM) font, MAKELPARAM(TRUE, 0));
    }
protected:
    HWND _hWnd;
};
22  Programación / Programación C/C++ / Re: como quitar el decorado de symbolos en clases exportadas en: 10 Octubre 2011, 02:56 am
fijate tu pm por favor  ;D


23  Programación / Programación C/C++ / Re: Ayuda problema en compilacion de dev c++ en: 10 Octubre 2011, 00:52 am
no tenes q tratar de compilar los numeros de linea, sacaselos

Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x;   
while(x=0;x<10;x++){
cout<<x<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}


los sake yo  :P
24  Programación / Programación C/C++ / Re: como quitar el decorado de symbolos en clases exportadas 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 ?




25  Programación / Programación C/C++ / Re: como quitar el decorado de symbolos en clases exportadas en: 9 Octubre 2011, 23:25 pm
claro esa es mi Confusión porque en el codigo del hack lo que hace es, tiene una DLL y un EXE y en los dos proyectos tiene la misma definicion de la clase con su constructor.... pero como la DLL esta exportando la clase entonces lo que hace en el EXE es crear un bloque de memoria del tamanio de la clase, luego crea un prototypo del constructor y le da la direccion de constructor en la DLL, y mueve a ecx el bloque para que entienda que clase va a usar (va a usarse la del EXE que fue asignada con malloc)

Citar
__asm { MOV ECX, pCCalc }   
pCtor ();

por esto de que el valor se ponia en ecx antes de llamar al constructor o los metodos...

pero en ese ejemplo la persona usa miembros de la clase y su declaracion de la clase que usa en el EXE no contiene las definiciones de los metodos, y eso igualmente no creo que sea la razon, pero a diferencia de mi ejemplo que yo solamente le paso un objeto creado en el EXE y lo tiene que modificar en esa funcion externa "FuncionQueUsaUnParametroDeClaseDatos" que no pertenece a la clase.. entonces porque esa funcion necesita algo mas que el objeto en si ?

tu sugerencia era que haga un constructor asi tanto en el EXE como en la DLL

Datos(Datos *dat)
{
      InicialisacionDeDatos();
      AsignacionDeValores();
}

y que en el WinMain cree el objeto y se lo pase como parametro al constructor recreado este, el cual tube que conseguir dinamicamente. es como que estaria usando la clase de la DLL y ignorando o no usando la del EXE,  :-\

y no seria lo mismo que pasar el objeto a la funcion esa "FuncionQueUsaUnParametroDeClaseDatos"? , que recibe el objeto con el proposito de modificarlo justamente.......

y todavia no entiendo porque el codigo solo esta en la DLL si en el EXE estoy definiendo la clase tambien, yo pensaba que la clase existia en ambos proyectos, cmo puede ser   :-\




26  Programación / Programación C/C++ / Re: como quitar el decorado de symbolos en clases exportadas en: 9 Octubre 2011, 22:47 pm
Si, le podes pasar el this explicitamente al constructor y al ser __thiscall lo pone en ecx.

Me imagino que si aunque seguis teniendo el tema del constructor, podes pasarle &objeto_de_datos supongo. El dllexport lo necesitas para que se exporten los metodos y el dllimport es para cuando usas la libreria de importacion (el .lib).

ahi modifique "FuncionQueUsaUnParametroDeClaseDatos" le agruege el & para que pueda ser modificada en la DLL  :) , osea que el EXE la llama, le pasa el objeto, y se modifica por esta funcion que se importa de la DLL

Citar
class EXPORT Datos
{
      /* miembros de clase */
};

EXPORT void FuncionQueUsaUnParametroDeClaseDatos( Datos &dat )//esta funcion modifica al bojeto
{
      /* modifica el objeto, lo inicializa y le asigna valores a sus miembros (propiedades) */

     dat.setValorA(5);//ejemplo
}

bool DllMain()
{
return true;
}

//--------------

Citar
class IMPORT Datos
{
      /* miembros de clase */
};

int WinMain()
{
       Hmod=LoadLibrary("midll.dll");

       //obtengo la direccion de la funcion en la DLL
       Puntero_FuncionQueUsaUnParametroDeClaseDatos = GetProcAddress(Hmod,"FuncionQueUsaUnParametroDeClaseDatos");

        Datos objeto_de_datos; // creo el objeto de clase en el EXE

        //llamo la funciin para que modifique el objeto
        Puntero_FuncionQueUsaUnParametroDeClaseDatos(objeto_de_datos);

       return 1;
}

pero porqe sigue el problema del constructor? eso lo que no entiendo si en este caso el problema es que ambos codigos usan la misma clase, pero el EXE que importa esa clase no usa ningun miembro, solamente crea un objeto, se lo pasa como parametro a la funcion y esa funcion es la que lo modifica y internamiente ella si llama algunos metodos pero eso se hace en la DLL.

y sobre el IMPORT para la clase en el EXE entonces no es necesario en mi caso no?, o si porque yo hago carga dinamica de esa funcion "FuncionQueUsaUnParametroDeClaseDatos" no necesito .lib ...

27  Programación / Programación C/C++ / Re: como quitar el decorado de symbolos en clases exportadas en: 9 Octubre 2011, 19:48 pm
osea que solo poniendo __thiscall como convecnion de llamada ya puedo quitar la parte de asm?
y el thiscall se puede poner explicitametne a partir del visual studio 2005 creo, igual etngo el 2008

lo que te decia es, si tengo un proyecto de una DLL asi, donde EXPORT es para hacer posible que estos symbolos sean exportados

Citar
class EXPORT Datos
{
      /* miembros de clase */
};

EXPORT void FuncionQueUsaUnParametroDeClaseDatos( Datos dat )
{
      /* code */
}

bool DllMain()
{
return true;
}

y despues tengo un EXE asi
Citar
class IMPORT Datos
{
      /* miembros de clase */
};

int WinMain()
{
       Hmod=LoadLibrary("midll.dll");

       Puntero_FuncionQueUsaUnParametroDeClaseDatos = GetProcAddress(Hmod,"FuncionQueUsaUnParametroDeClaseDatos");

        Datos objeto_de_datos

        Puntero_FuncionQueUsaUnParametroDeClaseDatos(objeto_de_datos);

       return 1;
}

si notas que ambos proyectos usan la misma clase es sus codigos, y que el EXE importa una funcion de la DLL, la funcion "FuncionQueUsaUnParametroDeClaseDatos" que usa un parametro que es un objeto de esa clase.....

la pregunta es si ambos codigos cuando se ejecutan reconocen que se trata de la misma clase?, primero eso, y segundo si hace falta hacer que la clase sea EXPORT en la DLL y IMPORT en el EXE, esas son las preguntas  :xD



28  Programación / Programación C/C++ / Re: como quitar el decorado de symbolos en clases exportadas en: 9 Octubre 2011, 17:35 pm
na si despues mirando bien el autor aclara que uso exports usando .def para desdecorar los decoramientos de esos exports, por eso me llamo la atencion... pero en el dumpbin se ven las funciones decoradas pero abajo se ven sin decorados ....

Citar
EXPORTS
   Add=?Add@CCalc@@QAEHHH@Z
   Sub=?Sub@CCalc@@QAEHHH@Z
   GetLastUsedFunc=?GetLastUsedFunc@CCalc@@QAEPADXZ
   CCalc=??0CCalc@@QAE@XZ



ahora voy a leer sobre esto que lo habia pasado por alto no se que es realmente
C++ Mature Approach: Using an Abstract Interface

sabes que hasta ahora logre que funcione el metodo del hack, pero como yo uso enlazamiento explisito, osea usando loadlibrary y getprocaddress, entonces lo que hice fue usar el nombre decorado como parametro de getprocaddress, se puede tambien  ;D

otra cosa que me gustaria saber es que si yo tengo una DLL y un EXE,  y en los dos proyectos tengo un .h adonde defino una clase, por cierto es la misma clase. y cuando trato de relacionar ambos elementos por ejemplo llamando un export de la DLL en el EXE, y ese export es una funcion que lleva como parametro algo asi "EXPORT void func(Clase c)", y Clase c es un parametro que utliza un objeto de esa clase... osea es compatible no es verdad?
es decir ambos programas van a reconocer que se trata de la misma clase no ?

29  Programación / Programación C/C++ / como quitar el decorado de symbolos en clases exportadas en: 9 Octubre 2011, 01:41 am
extern "C"
class __declspec(dllexport) Datos
{
public:
          void valorar(int i){val=i;};
private:
          int i;
};

hola estoy tratando de exportar una clase desde una dll para usarla en un programa, lo que qusiera es saber como quito el decoramiento de los exports de la dll ?
ya estuve mirando al respecto http://msdn.microsoft.com/en-us/library/81h27t8c.aspx
pero necesito como quitar el decoramiento de los exports si alguien sabe  :rolleyes:

EI: juntando mensajes.

 :-\ no sabia que no se podia
http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx

segun este informe si se exporta una clase usando vc el programa que la va a usar debe ser compilado con el msmo compilador por la gracia del decoramiento de nombres.

EI: juntando mensajes de nuevo.
alguien que sepa puede explicar esto
http://www.codeproject.com/KB/DLL/classesexportedusingLL.aspx

osea la persona esta importando miembros de una clase externa (que esta en una dll), y para encontrar los nombres de los miembros usa getprocaddress pero los nombres no estan decorados como puede ser ?, si habia leido que la decoracion en una clase no se podia evitar (al menos en visual studio), pero esta persona usa visual studio  :-\

otra pregunta seria si puedo usar getprocaddress de la misma forma que uso esta perzona pero pasandole como argumento el nombre decorado ya que decorado o no es un nombre  :P

espero alguna respuesta  ;-)
30  Programación / Programación C/C++ / como centralizar una aplicacion basada en dialogos en: 7 Octubre 2011, 23:39 pm
tengo una aplicacion basica de winapi32 (grafica), y esta basada en dialogos, pero desde el pimer momento en que creo el dialogo padre, cuando inicio la aplicacion el dialogo padre aparece en una esquina, yo lo quiero centralizado ¿ como debo hacer ?  :-*
aclaro algo, el primer dialogo osea el padre no esta relacionado a ningun otro porque es el primero creado en el main. por eso lo que pregunto es como centralizar el primer dalogo creado
algo busque XD
http://search.cpan.org/~robertmay/Win32-GUI-1.04/docs/GUI/Tutorial/Part1.pod#Centring_the_window_and_the_text

EI: juntando mensajes.

ah esto lo habia descubierto ya, los recursos tienen diversas propiedades, esto del centrado se puede especificar desde el script de recursos y no por programacion. solo se puede por programacion si se trata de una ventana hija  ::)
Páginas: 1 2 [3] 4 5 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines