Duda con %i

Iniciado por Komodo, 2 Septiembre 2010, 11:22 AM

0 Miembros y 1 Visitante están viendo este tema.

Komodo

#include <stdio.h>

int main(){
printf("%i");
return 0;
}


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.


Eternal Idol

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)
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

Komodo

Cita de: 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)
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


Littlehorse

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:

printf("%s");


Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Komodo

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.


Littlehorse

Un error en tiempo de ejecución. Probalo tranquilo que no vas a romper nada  ;D.
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Komodo

Salida:

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





Littlehorse

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

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Garfield07

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.


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

Komodo

Cita de: Sagrini 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.

Gracias por la recomendacion Sagrini