Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: harry_the_blogger en 5 Octubre 2014, 19:52 pm



Título: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Publicado por: harry_the_blogger en 5 Octubre 2014, 19:52 pm
Hola, amigos. ¿Como les ha ido? Tengo solo algunos conocimientos sobre el lenguaje C (No conozco mucho sobre C++).

Debido a eso tengo el siguiente problema: Tengo un puntero void que quiero convertir a unsigned char y obtener su valor (todo en la misma linea). Sin embargo, no he podido. ¿Será que alguien me puede ayudar?

Este es el codigo que tratado de hacer (Ya sé que ptr no apunta a ningun lado, pero es solo explicativo):

Código
  1.  
  2. //Intento 1: Al parecer no me da el valor que quiero
  3. void *ptr;
  4. unsigned char temp;
  5. temp = (unsigned char *) &ptr;
  6.  
  7. //Intento 2: El compilador no lo acepta.
  8. void *ptr
  9. unsigned char temp;
  10. temp = (unsigned char) *ptr;
  11.  
  12.  

Ya he buscado por internet, pero no entiendo mucho sobre como hacer lo que expliqué antes. (El tema de los punteros se vuelve un poco enredado. XD).

Se supone que al aplicar * delante de un puntero, él debería devolver su valor. Entonces por qué el compilador no me acepta la segunda opcion???

Gracias a todos de antemano.


Título: Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Publicado por: ThePinkPanther en 5 Octubre 2014, 20:04 pm
Prueba así ;

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6.    int x=5;
  7.    void *ptr;
  8.    ptr=&x;
  9.    unsigned char temp;
  10.    temp = *(unsigned char*)ptr;
  11.    printf("Valor :%c \n",temp);
  12.  
  13. }
  14.  
  15.  


Título: Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Publicado por: harry_the_blogger en 5 Octubre 2014, 20:21 pm
Código
  1. //Intento 1: Al parecer no me da el valor que quiero
  2. void *ptr;
  3. unsigned char temp;
  4. temp = (unsigned char *) &ptr;
  5.  

hola, y si pruebas así..

Código
  1. void *ptr;
  2. unsigned char *temp;
  3. temp = (unsigned char *) ptr;
  4.  


Sobre el intento 2, yo hice algo así y me funciono :

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  
  7.    int x=5;
  8.    void *ptr;
  9.    ptr=&x;
  10.    unsigned char temp;
  11.    temp = *(unsigned char*)ptr;
  12.    printf("Apunte a :%c \n",temp);
  13.  
  14. }
  15.  
  16.  


Gracias por ofrecerme tu ayuda, pero lo probé, y en mi caso particular no funciono. La funcion es la siguiente: (La postearé para que si alguna otra persona quiere ayudarme):

Código
  1. int callback(unsigned int event, void *ptr, void *ptr_additional, void *ptr_file){
  2.    unsigned char temp;
  3.  
  4.    switch (event){
  5.        case event_trash_byte_found_in_code:
  6.  
  7.            //Aqui hago lo que me dijiste
  8.            temp = (unsigned char *) ptr;
  9.            show_prefixe((FILE *) ptr_file, temp);
  10.            fprintf((FILE *) ptr_file, "(reported by callback!!)\n");
  11.            break;
  12.        case event_instruction_decoded:
  13.  
  14.            ///Aqui hago lo que me dijiste
  15.            temp = (unsigned char *) ptr_additional;
  16.            fprintf((FILE *) ptr_file, "A instruction found!! 0x%x\n", temp);
  17.  
  18.            switch(temp){
  19.                case general_opcode_push:
  20.                    fprintf((FILE *) ptr_file, "push exx \n");
  21.                    break;
  22.                case general_opcode_pop:
  23.                    fprintf((FILE *) ptr_file, "pop exx \n");
  24.                    break;
  25.                case general_opcode_inc:
  26.                    fprintf((FILE *) ptr_file, "inc exx \n");
  27.                    break;
  28.                case general_opcode_dec:
  29.                    fprintf((FILE *) ptr_file, "dec exx \n");
  30.                    break;
  31.            }
  32.  
  33.            break;
  34.        default:
  35.            break;
  36.    }
  37. }
  38.  

Básicamente es una funcion, que dependiendo según sea un caso u otro, toma una decision. Show_prefixe recibe el byte temp, y lo imprime en un fichero. Creo que sería algo demasiado tedioso leer todo mi codigo (el cual es bastante extenso)

Bueno, gracias por tu ayuda. Lo intentaré nuevamente a haber si fue que seguí mal algun paso de los que me has dado.


Título: Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Publicado por: ThePinkPanther en 5 Octubre 2014, 20:28 pm
Código
  1. int callback(unsigned int event, void *ptr, void *ptr_additional, void *ptr_file){
  2.    unsigned char temp;
  3.  
  4.    switch (event){
  5.        case event_trash_byte_found_in_code:
  6.  
  7.            //Aqui hago lo que me dijiste
  8.            temp = *(unsigned char*) ptr;
  9.            show_prefixe((FILE *) ptr_file, temp);
  10.            fprintf((FILE *) ptr_file, "(reported by callback!!)\n");
  11.            break;
  12.        case event_instruction_decoded:
  13.  
  14.            ///Aqui hago lo que me dijiste
  15.            temp = *(unsigned char *) ptr_additional;
  16.            fprintf((FILE *) ptr_file, "A instruction found!! 0x%x\n", temp);
  17.  
  18.            switch(temp){
  19.                case general_opcode_push:
  20.                    fprintf((FILE *) ptr_file, "push exx \n");
  21.                    break;
  22.                case general_opcode_pop:
  23.                    fprintf((FILE *) ptr_file, "pop exx \n");
  24.                    break;
  25.                case general_opcode_inc:
  26.                    fprintf((FILE *) ptr_file, "inc exx \n");
  27.                    break;
  28.                case general_opcode_dec:
  29.                    fprintf((FILE *) ptr_file, "dec exx \n");
  30.                    break;
  31.            }
  32.  
  33.            break;
  34.        default:
  35.            break;
  36.    }
  37. }
  38.  

prueba así.


Título: Re: Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Publicado por: harry_the_blogger en 5 Octubre 2014, 21:40 pm
Gracias ThePinkPanther. Me has ayudado a resolver mi problema. Daré este tema por solucionado.