Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: linkgl en 1 Enero 2011, 00:06 am



Título: [Solucionado]Convertir el AddressOfEntryPoint de DWORD a LPSTR? [C]
Publicado por: linkgl en 1 Enero 2011, 00:06 am
Buenas, pues estoy sacando el EntryPoint de un ejecutable con image_nt_headers, el problema viene a que me ví con la necesida de pasarlo a LPSTR o char *, entonces hago

//estructuras
IMAGE_NT_HEADERS inh;
IMAGE_DOS_HEADER idh;
...

LPSTR szBuffer;
szBuffer=(LPSTR)inh.OptionalHeader.AddressOfEntryPoint; // <- si dejo el code hasta aquí no me da error al correr el programa
MessageBox(NULL,szBuffer,"",MB_OK); //<-Cuando pongo esta linea me salta el error

Cuando pongo la linea del MessageBox para mostrar el entrypoint tipo LPSTR me marca un error al leer la memoria, dice que no se puede "read" la direccion en memoria 0x0000xxxx

¿Por qué sucederá esto, o cómo podría ese entero(DWORD) a string(LPSTR)?

Gracias por leer el post, recién estoy leyendo documentación sobre el PE y sus estructuras jeje pero no encontré nada al respecto


Título: Re: Convertir el AddressOfEntryPoint de DWORD a LPSTR? [C]
Publicado por: m4rtyr en 1 Enero 2011, 01:46 am
eh probado
int xxx=inh->OptionalHeader.AddressOfEntryPoint;
   MessageBox(NULL,&xxx,"",MB_OK);
no me da error pero no tiene mensage
el messagebox solo puede printar Ascci o unicode , y el entrypoint no es ni Ascci o unicode

usa printf("%X",inh->OptionalHeader.AddressOfEntryPoint);
// offtopic me registre solo para responderte xD
saludos


Título: Re: Convertir el AddressOfEntryPoint de DWORD a LPSTR? [C]
Publicado por: linkgl en 1 Enero 2011, 02:07 am
m4rty! que gusto verte por acá haha de haberlo sabido habría posteado en indetectables también xD, pues te comento con printf si funciona con %x (hex) y %d (entero), pero lo que pasa es que no estoy haciendo el programa para la consola, estoy usando las librerías de wx para crear una GUI, y necesito pasar el parámetro como una string de tipo char * o LPSTR, así:

Wx.Edit->SetValue(entrypoint);

Sólo quiero convertir el valor del entrypoint en una string para mostrarlo en pantalla!. He intentado con el & (cómo no lo puse anteriormente) y ahora no me marca error pero me imprime caracteres raros

WxEdit->SetValue((char *)&inh.OptionalHeader.AddressOfEntryPoint); // salida -> ”

 :rolleyes: Alguna otra idea? jeje

->Edito
Ya recorde que al hacerle (char *) a un int te lo convierte a ascii... Al parecer toma el valor DWORD del entry point y convierte los números a ascii, pero de ahí creo que me las puedo arreglar lo que hace es esto:

DWORD xxx=65;
WxEdit->SetValue((char *)&xxx)); // salida -> A

jeje bueno si alguien tiene una idea de como hacer que salga el numero sin convertirlo a ascii pues que lo diga haha mientras voy a intentar otras formas y sigo publicando  :rolleyes:

--> Edito 2
Ya lo he solucionado he utilizado itoa, no quería usarlo por no ser "estandar" pero bue.. funciona y es lo que vale supongo, ojala y el tema le sirva a alguien que intente algo similar en un futuro! salu2:

Código:
// ejemplo de solucion al problema ->

    int entrypoint;
    char buffer[30];

        entrypoint=inh.OptionalHeader.AddressOfEntryPoint;
        itoa(entrypoint,buffer,10);
        //WxEdit1->SetValue(buffer);

Gracias m4rty nos estamos viendo capo

-> Edito por tercera vez...
Seguí experimentando, otra solución alternativa:
Código:
        entrypoint=inh.OptionalHeader.AddressOfEntryPoint;
        sprintf(buffer,"%d",entrypoint);

Se almacena ya convertido en char en buffer :P