Binarios ejecutables
Introducción
Existen archivos binarios tanto ejecutables como no ejecutables. En estas secciones hablaremos de los archivos binarios ejecutables.
En linux, se puede utilizar el comando file para identificar ante qué tipo de archivo binario estamos.
Si este comando muestra que el archivo es de tipo ELF (Executable and Likable Format), efectivamente es un archivo binario ejecutable.
Formato ELF
Este formato es ampliamente usado en Linux.
Se puede utilizar el comando readelf para poder obtener información de la cabecera del archivo binario ejecutable.
readelf -h archivo_binario
Uso de gdb
Se puede utilizar la herramienta GDB (GNU Debugger) para leer el código en ensamblador de un binario. Por ejemplo, si el binario se llama labsis:
$ gdb labsis
Adentro de gdb se puede hacer:
(gdb) set disassembly-flavor intel
(gdb) disass main
La palabra main indica que se va obtener el assembler de la función main.
También se pueden visualizar todas las funciones del binario con:
(gdb) info functions
Referencias:
Uso del comando file de Linux
Cuando uno ejecuta:
file archivo_binario
Puedo retornar una salida similar a:
archivo_binario: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 2.6.24, BuildID[sha1]=cd439ea515ecfbb1280cfacd93e0703ed9c4d38c, not stripped
Prestar especial atención en el "not stripped". Un binario ejecutable stripped indica que va a tener los símbolos de debug. En caso que sea not stripped no los va a tener.
Además, figura la arquitectura para la cual fue compilado el programa. En este caso para Intel 80386.
Analizando syscall ejecutadas por un binario ejecutable
strace archivo_binario