¿Por qué `strip` no elimina los encabezados de sección de los ejecutables ELF?

9

Un ejecutable ELF mínimo solo requiere el encabezado ELF y al menos un encabezado de programa para ser funcional. Sin embargo, cuando ejecuto strip en un ejecutable corto, decide no tirar la tabla de encabezado de sección o la sección de cadenas de sección, manteniéndolas aunque no tengan ningún propósito (hasta donde yo sé) para la ejecución del programa.

¿Hay alguna razón por la cual estos no se eliminan por tira? ¿Hay alguna otra utilidad que elimine todo lo que no es necesario para que se ejecute el ejecutable? Intenté editar manualmente el código ejecutable de golf que estaba haciendo para eliminar los encabezados de sección, y parece funcionar bien, y es mucho más pequeño.

Mystor
fuente
Probablemente no esté despojado porque puede interrumpir algunos programas / tiempos de ejecución
cat

Respuestas:

3

La documentación para GNU binutilsstrip alude a la razón, pero no es explícita, mencionando en la descripción de --only-keep-debugese

Nota: los encabezados de sección de las secciones eliminadas se conservan, incluidos sus tamaños, pero el contenido de la sección se descarta. Los encabezados de sección se conservan para que otras herramientas puedan hacer coincidir el archivo debuginfo con el ejecutable real, incluso si ese ejecutable se ha reubicado en un espacio de direcciones diferente.

Es decir, a menos que se le indique explícitamente a través de la -Ropción, stripretendrá los encabezados de sección para ayudar a otros programas (incluido gdb) a hacer su trabajo.

La página Uso correcto del comando strip (parte de Ingeniería inversa utilizando el sistema operativo Linux ) notas

Ejecutar el stripcomando en un ejecutable es el método de protección de programa más común. En su operación predeterminada, el stripcomando elimina la tabla de símbolos y cualquier información de depuración de un ejecutable. Así es como se usa típicamente. Sin embargo, todavía hay información útil que no se elimina.

y luego enumera varias cosas útiles que podrían quedar atrás, para el análisis de un ejecutable "despojado".

En Learning Linux Binary Analysis , esto se reitera, comentando que los encabezados de sección normalmente solo faltan cuando alguien los ha eliminado deliberadamente , y que sin encabezados de sección, gdby objdumpson casi inútiles.

Thomas Dickey
fuente