Páginas

Monday, February 11, 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.

2 comments:

  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

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

    ReplyDelete

I would be glad to know your opinion about my post, please do not forget to sign it ;)