Posteado por: Pablo | febrero 12, 2008

Funcion system()


La funcion de C system() la necesitaba para un programa que ejecutara comandos del sistema operativo, pero comandos que el usuario final de mi programa le intrudujera en tiempo de ejecucion, no que yo escribiera en tiempo de programacion, es decir necesitaba que el argumento de esa funcion fuera algo que pudiera cambiar de “valor”, pero todos los ejemplos que encontraba eran asi:

system(“ls -l”);

o

system(“pwd”); en fin, algo asi bien bobo..pues bueno, la manera de hacer lo que necesitaba fue esta:

char nombre[100]; //aca iran guardados los comandos
char *ptr_nombre; //puntero a la cadena anterior
ptr_nombre=&nombre[0]; //le da direccion al puntero
const char *comando=ptr_nombre; /*necesario para la funcion system(), este es el tipo de argumentos que recibe la funcion.
es un puntero a una constante, de modo que el valor en ptr_nombre no puede cambiar, entonces lo que cambia es lo apuntado por ptr_nombre*/
fflush(stdin); // limpia el buffer de teclado
printf("\tIntroduzca Comando:\n");
fflush(stdin); // limpia el buffer de teclado
gets(nombre); //guarda el string en la direccion de nombre
system(comando); //ejecuta el comando que esta guardado en la cadena apuntada por ptr_nombre

Espero haya sido claro.


Responses

  1. Si este programa este codigo lo usara alguien en un servidor, seria vulnerable a un ataque de buffer overflow. Pues si un usuario ingresa a tu programa un comando de tamaño superior a 100 caracteres, se sobreescribe el vector, se sobreescribe la direccion que se encuentra la pila y por ende se puede tomar el control de la aplicación. La función system ademas no debe ser utilizada, es mejor utilizar execve, ademas que gets si que no debe ser utilizada, y menos cuando no estas controlando el tamaño de la entrada

  2. […] Funcion system() febrero, 2008 1 comentario 3 […]

  3. Muy buena información, me ha sido muy útil para un pequeño programa en c++ que necesito hacer para automatizar tareas.

    Muchisimas gracias por la información.

    +1.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: