19/7/12

what de UNIX en Linux

Hola a todos! Luego de algún tiempo sin escribir (exactamente 3 años, 5 meses y 7 días =P) he vuelto para traerles algo que les sera útil para aquellos que programan en C/C++ y quieren saber que fuentes contiene un binario que generaron en su proyecto.
Tal como el titulo lo dice en UNIX tenemos el comando what y en linux, si no me equivoco, "no tenemos una alternativa" a ese comando.

Básicamente el comando en UNIX se usa de la siguiente manera:
what binario
y la información que nos trae es la de los fuentes con los que se ha compilado el binario.

La particularidad que deben tener los fuentes tal como nos dice la pagina del man de unix (man what) es incluir dentro de el una linea como la siguiente:
char version_id[] = "@(#)identification information"; 
Vemos un ejemplo, escribamos un pequeño programa en C (al que llamaremos a.c), con el siguiente contenido:
 char version_id[] = "@(#)a.c v1.2";

#include

main()
{
    printf("Hola Mundo \n");
    return 0;
}
Ahora compilamos:
gcc a.c
Y esto nos generara, un binario llamado a.out.

Como comente arriba no "disponemos" del comando what en LINUX, pero lo podemos emular de la siguiente manera:
strings  a.out | grep '@(#)'
y la salida del comando anterior, como se imaginan sera:
@(#)a.c v1.2
Como ven, se puede incluir cualquier tipo de información que deseen...

Investigando un poco mas, encontré un fuente de what usado en BSD, que pueden bajar y compilar uds mismos desde aquí.

El único inconveniente que encontré al compilarlo es que no se encontraba la función
strlcpy, la cual se encuentra en la libbsd, -lbsd. Los usuarios de Debian y derivados pueden descargar sin mayor problema...

Bien, espero les sirva, se ven al rato!

 

No hay comentarios.: