13.7.1 Programa sencillo en C (gcc
)
Un simple ejemplo example.c
para compilar con la biblioteca
libm
y obtener el ejecutable run_example
:
$ cat > exemple.c << EOF
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(int argc, char **argv, char **envp){
double x;
char y[11];
x=sqrt(argc+7.5);
strncpy(y, argv[0], 10); /* evita el desbordamiento del b�fer */
y[10] = '\0'; /* para asegurar que la cadena termine con un '\0' */
printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
return 0;
}
EOF
$ gcc -Wall -g -o run_example example.c -lm
$ ./run_example
1, 2.915, ./run_exam, (null)
$ ./run_example, 1234567890qwerty
2, 3.082, ./run_exam, 1234567890qwerty
Aqu�, -lm se necesita para enlazar la biblioteca
libm y poder as� usar sqrt(). La biblioteca
actual se encuentra en el directorio /lib
con el nombre
libm.so.6
que es un enlace l�gico a libm-2.1.3.so
.
Observe el �ltimo par�metro del texto de salida. Existen m�s de 10 caracteres
a pesar de haber especificado %10s.
El uso de funciones que efectuan operaciones con punteros sin verificar sus
lim�tes, tales como sprintf
y strcpy
, es censurado
pues no evita las vulnerabilidades que surgen por desbordamiento de b�fer.
Utilice, en cambio, snprintf
y strncpy
.