NOTA: No todos los binarios tienen incrustada la versión de GCC que se uso en su compilación. En muy contados casos se pueden conocer las opciones de compilación de un ejecutable, ya que no es algo que se incluya de manera predeterminada. Para incluir dicha información dentro del ejecutable se debe especificar la siguiente opción al compilar con gcc.
gcc -O2 -frecord-gcc-switches programa.c
Algunas aplicaciones que se pueden utilizar para analizar los binarios en busca de información son las siguientes.
Readelf.
# Se extrae el contenido de la sección denominada "comment" del ejecutable. readelf -p .comment /usr/bin/photorec Volcado de cadenas de la sección '.comment': [ 0] GCC: (GNU) 5.2.0 readelf -p .GCC.command.line /usr/bin/photorec [ 0] photorec.c [ 6] -mtune=generic [ 13] -march=x86-64 [ 20] -O3 [ 21] -frecord-gcc-switches # En ocasiones se puede visualizar junto a la versión de GCC, la distro utilizada: # GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-54) # Listar todas las secciones del ejecutable. readelf -S /usr/bin/photorec
Strings.
strings /usr/bin/photorec | grep -i gcc GCC %i.%i GCC: (GNU) 5.2.0
Objdump.
objdump -s --section .comment /usr/bin/photorec /usr/bin/photorec: formato del fichero elf64-x86-64 Contenido de la sección .comment: 0000 4743433a 2028474e 55292035 2e322e30 GCC: (GNU) 5.2.0 0010 00
Buscar en las opciones de los comandos (versión).
/usr/sbin/nginx -V nginx version: nginx/1.9.5 built by gcc 5.9.2 (Debian 5.7.2-5) built with OpenSSL 2.0.1e 11 Feb 2011 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --with-http_auth_request_module --with-http_spdy_module --add-module=/root/ngx_pagespeed-master
Firefox > “about:buildconfig”
Paquetes binarios precompilados (rpm, deb, etc).
Algunos paquetes incluyen en su información opciones de compilación usadas en la creación del paquete. Los paquetes binarios de código fuente (ej. src.rpm) suelen tener también definidas las opciones de compilación que se deben utilizar, las cuales, en el caso de RPMs se encuentran dentro de los ficheros “.spec”.