Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Komodo en 2 Septiembre 2010, 11:22 am



Título: Duda con %i
Publicado por: Komodo en 2 Septiembre 2010, 11:22 am
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. printf("%i");
  5. return 0;
  6. }

En pantalla se imprime siempre el mismo numero al menos a mi..

Porque sale ese..supongo que será algo de la memoria, pero prefiero aclarar esa pequeña curiosidad.


Título: Re: Duda con %i
Publicado por: Eternal Idol en 2 Septiembre 2010, 11:36 am
Ese codigo es erroneo, la funcion printf espera un parametro asi que accede a la pila a una direccion que no debe al no estar pasandoselo ... asumiendo que usas VC++:

Si compilaste en debug el valor sera el del registro ebp al comenzar la funcion (push ebp)

Si compilaste en release el valor sera la direccion a la que debe saltar la funcion al salir (call/ret)


Título: Re: Duda con %i
Publicado por: Komodo en 2 Septiembre 2010, 15:27 pm
Ese codigo es erroneo, la funcion printf espera un parametro asi que accede a la pila a una direccion que no debe al no estar pasandoselo ... asumiendo que usas VC++:

Si compilaste en debug el valor sera el del registro ebp al comenzar la funcion (push ebp)

Si compilaste en release el valor sera la direccion a la que debe saltar la funcion al salir (call/ret)
Gracias era eso, lo unico que aunque sea erroneo como no ha de modificar la memoria solo imprime no hay riesgo aunque acceda a una pila equivocada


Título: Re: Duda con %i
Publicado por: Littlehorse en 2 Septiembre 2010, 17:19 pm
Si que hay riesgo, es tal como dice EI. Acceder a una dirección invalida produce comportamiento indefinido, tales como corrupción de datos, errores en tiempo de ejecución, etc.

Por ejemplo:

Código
  1. printf("%s");


Saludos


Título: Re: Duda con %i
Publicado por: Komodo en 2 Septiembre 2010, 18:19 pm
Eso sacaría una cadena de caracteres pero como falta el parametro, que saldría?

PD: No soy tan curioso como para probarlo sin más, luego lo pruebo en VirtualBox.


Título: Re: Duda con %i
Publicado por: Littlehorse en 2 Septiembre 2010, 18:27 pm
Un error en tiempo de ejecución. Probalo tranquilo que no vas a romper nada  ;D.


Título: Re: Duda con %i
Publicado por: Komodo en 2 Septiembre 2010, 18:34 pm
Salida:

UëÕâí  @
Process returned 0 (0x0)   execution time : 0.037 s
Press any key to continue.





Título: Re: Duda con %i
Publicado por: Littlehorse en 2 Septiembre 2010, 19:04 pm
Ejecuta la aplicacion desde la carpeta del proyecto, y tendrás el error. Igualmente ni siquiera hace falta ver un error en tiempo de ejecución, ya el hecho que imprima caracteres aleatorios y acceda a posiciones de memoria invalidas implica que obviar los parámetros en printf es un error.

Saludos

 


Título: Re: Duda con %i
Publicado por: Garfield07 en 3 Septiembre 2010, 11:46 am
En un libro salia como corromper la memoria correctamente para hacer saltar a otra direccion el programa. El libro esta bastante bien para los que quieren aprender algo sobre el hacking de antes en el que no se usaban programas descargados de tal hacker. Buenos tiempos xD.
El libro te enseña a programar en C, con buenas clases de ensamblador a las que hay que estar muy atento, a usar los sockets, con su ejemplo de servidor escrito 100% a mano y legible xD, a programar shellcodes, buscar fallos y crearles los exploits necesarios, etc. Es el mejor libro de hacking que he leido nunca xD.
Se llama Hacking. Técnicas fundamentales, de Anaya.
Si quereis hacer algo en serio, teneis el espiritu y las ganas, miradlo muy bien, porque es increible.


Título: Re: Duda con %i
Publicado por: Komodo en 3 Septiembre 2010, 12:01 pm
En un libro salia como corromper la memoria correctamente para hacer saltar a otra direccion el programa. El libro esta bastante bien para los que quieren aprender algo sobre el hacking de antes en el que no se usaban programas descargados de tal hacker. Buenos tiempos xD.
El libro te enseña a programar en C, con buenas clases de ensamblador a las que hay que estar muy atento, a usar los sockets, con su ejemplo de servidor escrito 100% a mano y legible xD, a programar shellcodes, buscar fallos y crearles los exploits necesarios, etc. Es el mejor libro de hacking que he leido nunca xD.
Se llama Hacking. Técnicas fundamentales, de Anaya.
Si quereis hacer algo en serio, teneis el espiritu y las ganas, miradlo muy bien, porque es increible.

Gracias por la recomendacion Sagrini