Guía de tecnologías

Cómo solucionar Cannot Execute Binary File: Exec Format Error

7 min read Linux Actualizado 17 Oct 2025
Arreglar Exec Format Error en Linux
Arreglar Exec Format Error en Linux

Si ves el mensaje Cannot Execute Binary File: Exec Format Error significa que el binario que intentas ejecutar no es compatible con tu entorno. Revisa arquitectura con file y readelf, comprueba integridad con md5sum o sha256sum, fija permisos con chmod +x y, si es necesario, usa emulación con qemu o contenedores. Sigue la lista de diagnóstico y las soluciones detalladas abajo.

Solución de errores

Qué significa Cannot Execute Binary File: Exec Format Error

El mensaje Cannot Execute Binary File: Exec Format Error aparece cuando el kernel no puede interpretar el formato del archivo que se intenta ejecutar. Las causas más habituales son:

  • Incompatibilidad de arquitectura entre el binario y la CPU del sistema.
  • Archivo binario corrupto o descarga incompleta.
  • Falta de permisos de ejecución para el usuario actual.
  • Formato de ejecutable que requiere un intérprete o capa de compatibilidad inexistente.
  • Problemas con finales de línea o scripts sin shebang válido que el sistema trata como binarios.
  • Configuración de entorno o shell que impide la ejecución.

Error de ejecución de binario

Diagnóstico rápido

Pasos rápidos para identificar la causa antes de aplicar soluciones:

  1. Ejecuta file sobre el binario para ver el formato y la arquitectura
file mi_ejecutable

Salida típica: ELF 64-bit LSB executable, x86-64 o ELF 32-bit LSB executable, Intel 80386

  1. Revisa permisos
ls -l mi_ejecutable

Verifica que tenga la x para el usuario que ejecuta.

  1. Comprueba integridad
md5sum mi_ejecutable
sha256sum mi_ejecutable

Compara con el checksum publicado por la fuente.

  1. Inspecciona cabecera ELF y dependencias
readelf -h mi_ejecutable
ldd mi_ejecutable  # puede fallar si la arquitectura no coincide
  1. Intenta ejecutar con strace para ver el fallo del kernel
strace ./mi_ejecutable
  1. Si es un script, abre la primera línea: debe existir un shebang válido como #!/bin/bash

Causas comunes y cómo confirmarlas

Arquitectura incompatible

  • Qué comprobar: con file y readelf verás si el binario es ELF 32-bit vs ELF 64-bit o si está destinado a ARM, MIPS u otra CPU.
  • Por qué falla: un binario compilado para ARM no puede ejecutarse sobre una CPU x86_64 sin emulación.

Archivo corrupto o incompleto

  • Qué comprobar: checksums MD5/SHA o tamaño de archivo frente al esperado.
  • Señal: descargas interrumpidas producen binarios que no contienen cabecera válida.

Permisos insuficientes

  • Qué comprobar: bits de permiso. Si falta la x, el kernel no lo ejecutará.

Formato no ejecutable o script con CRLF

  • Qué comprobar: si file indica texto y la primera línea no comienza por #!, el shell puede intentar interpretar algo que no existe. Los finales de línea Windows CRLF pueden romper el shebang y llevar a errores.

Requerimiento de intérprete o compatibilidad

  • Qué comprobar: algunos ejecutables son wrappers que invocan un intérprete concreto o necesitan librerías de compatibilidad (por ejemplo, bibliotecas de 32 bits en un sistema 64 bits).

Soluciones paso a paso

1. Comprobar y confirmar la arquitectura

  1. Ejecuta:
file mi_ejecutable
readelf -h mi_ejecutable
  1. Si ves ELF 32-bit en un sistema 64-bit, considera instalar bibliotecas de compatibilidad de 32 bits o ejecutar en un contenedor/emulador.

Ejemplo en Debian/Ubuntu para permitir binarios i386:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libstdc++6:i386

Nota: los nombres exactos de paquetes dependen de la distribución.

2. Volver a descargar el binario y comprobar integridad

Si el checksum no coincide, redescarga el archivo desde la fuente oficial y vuelve a comprobar:

sha256sum mi_ejecutable

Si la fuente publica un sha256, compáralo. Si no, descarga mediante mecanismos fiables.

3. Arreglar permisos de ejecución

Otorga permiso ejecutable y vuelve a intentar:

chmod +x mi_ejecutable
./mi_ejecutable

Si el binario debe ejecutarse como otro usuario, usa sudo o su según corresponda.

4. Detectar scripts mal formados y finales de línea

Si file indica que el archivo es texto, inspecciona la primera línea y los finales de línea:

head -n 1 mi_ejecutable
file mi_ejecutable
dos2unix mi_ejecutable   # convierte CRLF a LF si fuese necesario

Asegúrate de que la primera línea contenga un shebang válido como #!/usr/bin/env bash

5. Usar emulación con qemu para otras arquitecturas

Para ejecutar binarios de otra arquitectura localmente puedes usar qemu-user o qemu-user-static junto con binfmt_misc. En Debian/Ubuntu:

sudo apt install qemu-user-static binfmt-support

Esto permite registrar intérpretes en binfmt_misc para que el kernel invoque qemu cuando se detecte un binario ARM, por ejemplo. Otra opción es usar contenedores preempaquetados con qemu.

6. Ejecutar dentro de un contenedor o máquina virtual

Si la emulación local no es suficiente, arranca una VM o contenedor con la arquitectura adecuada. Docker puede ser útil para aislar el entorno y usar imágenes multiarch:

# ejemplo conceptual
docker run --rm -it --platform linux/arm64 imagen-arm bash

La opción –platform exige soporte del runtime y del host.

7. Cross-compilación o recompilación

Si tienes acceso al código fuente, lo más limpio es recompilar para la arquitectura objetivo:

# pasos generales
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=toolchain-file  # o configure/make según el proyecto
make

Si no manejas toolchains, considera compilar dentro de una VM con la arquitectura correcta.

8. Revisar dependencias y bibliotecas compartidas

Si readelf o ldd muestran dependencias faltantes, instala las librerías necesarias. Para binarios 32/64-bit en Debian/Ubuntu, instala los paquetes libc6:arch y libstdc++ correspondientes.

9. Ver SELinux o AppArmor

En sistemas con SELinux o AppArmor, el fallo puede provenir de políticas que impiden la ejecución. Revisa logs de auditd o journalctl y adapta las políticas si procede.

# ejemplo para SELinux
sudo ausearch -m avc -ts recent
sudo journalctl -xe

Casos especiales y cuándo aplicar cada solución

  • Si file muestra arquitectura diferente: usa emulación, contenedor o recompilación.
  • Si los checksums no coinciden: redescarga y verifica.
  • Si falta la x: chmod y vuelve a intentar.
  • Si es un script: arregla shebang o finales de línea.
  • Si ldd no funciona por arquitectura distinta: usa qemu/binfmt o reproduce en la plataforma objetivo.

Métodos alternativos y heurísticos rápidos

  • Heurística 1: Si descargaste desde web y el archivo es pequeño o extraño, primero compara checksum.
  • Heurística 2: Si el host es ARM o Raspberry Pi y el binario indica x86, reconsidera su origen.
  • Heurística 3: Si el error aparece tras clonar un repositorio, confirma que el archivo no sea un enlace simbólico roto.

Mini metodología para resolución sistemática

  1. Información: file + readelf + ls -l + md5/sha256
  2. Clasificación: incompatibilidad de arquitectura / corrupción / permisos / formato
  3. Remediación: chmod / redescarga / emulación o recompilación
  4. Verificación: ejecutar, revisar logs, probar en entorno limpio

Checklist por rol

Desarrollador

  • Confirmar plataforma objetivo en la documentación
  • Proveer builds multiarch o contenedores
  • Incluir checksums y firmas

Administrador de sistemas

  • Verificar paquetes de compatibilidad instalados
  • Configurar qemu/binfmt si se requiere
  • Revisar políticas SELinux/AppArmor

Usuario final

  • Ejecutar file y pedir a soporte la versión correcta
  • No ejecutar binarios de fuentes no fiables
  • Pedir instrucciones de compatibilidad

Flujo de decisión (Mermaid)

flowchart TD
  A[Empieza: intento de ejecución] --> B{file muestra ELF y arquitectura}
  B -- Coincide --> C{¿Tiene permiso x?}
  B -- No coincide --> D[Usar emulación o recompilar]
  C -- Sí --> E{Checksum correcto}
  C -- No --> F[chmod +x y ejecutar]
  E -- Sí --> G[Revisar dependencias y entorno]
  E -- No --> H[Redescargar y verificar checksum]
  G --> I[Ejecutar con éxito o revisar logs]
  H --> A
  F --> A
  D --> I

Ejemplos prácticos

  1. Intento ejecutar y file indica ARM en x86_64
$ file mi_app
mi_app: ELF 32-bit LSB executable, ARM, EABI5

Solución: usar qemu-user-static o ejecutar en máquina ARM.

  1. Archivo de texto sin shebang
$ file mi_script
mi_script: ASCII text
$ head -n 1 mi_script
#!/bin/sh

Si ves un retorno de carro CRLF, ejecuta dos2unix y asegúrate de que el intérprete exista.

Buenas prácticas para evitar el error

  • Publicar las arquitecturas soportadas y checksums junto a los binarios.
  • Proveer builds para x86_64 y ARM cuando sea posible.
  • Documentar dependencias de librerías y versiones.
  • Empaquetar binarios en contenedores si la portabilidad es un requisito.

Cuándo no aplicar estas soluciones

  • Si el binario es malicioso, no intentes forzarlo: descártalo.
  • Si no confías en la fuente, mejor recompilar desde código conocido o usar paquetes oficiales.

Notas de seguridad y privacidad

  • No ejecutes binarios de fuentes no verificadas sin analizarlos primero.
  • Mantén registros de acciones administrativas y evita su ejecución como root salvo cuando sea necesario.

Resumen final

Importante: Ejecutar un binario equivale a permitir que el código se ejecute en tu máquina. Antes de aplicar remedios, identifica claramente si el problema es de arquitectura, integridad, permisos o formato. Usa emulación o contenedores cuando la recompilación no sea viable. Documenta la solución y añade checksums para futuras descargas.

Si aún tienes dudas, describe el output de los comandos file, readelf -h y ls -l y se podrá precisar la solución.

Notas

  • Si necesitas pasos específicos para Debian, Ubuntu, Fedora o Arch, indica la distribución y la arquitectura y añado comandos concretos.

Créditos y lecturas relacionadas

  • Hannah Montana Linux: What is It Better than other Distro by J. Shanmugam
  • How to List Groups in Linux by K. Masoun
  • How to Install and Use iTunes on Ubuntu? by Shruti Gupta
Autor
Edición

Materiales similares

Reparar error 0x00000124 en Windows 10
Windows

Reparar error 0x00000124 en Windows 10

Responder y posponer notificaciones en iPhone
iPhone

Responder y posponer notificaciones en iPhone

Ver historial de uso del Nest Thermostat
Domótica

Ver historial de uso del Nest Thermostat

Activar rotación del escritorio en Android
Android

Activar rotación del escritorio en Android

Resolver error de desconexión en Path of Exile
Juegos

Resolver error de desconexión en Path of Exile

Actualizar Macs usados: guía práctica
Hardware

Actualizar Macs usados: guía práctica