La Red de Conocimientos Pedagógicos - Currículum vitae - Un breve análisis de los archivos ELF

Un breve análisis de los archivos ELF

Prólogo: En el flujo de trabajo inverso, entraremos en contacto con archivos so y, bajo determinadas circunstancias, procesaremos archivos so. Desde la perspectiva del archivo, también pertenece al archivo ELF. Analicemos el archivo so desde la perspectiva de los archivos ELF.

Los archivos ELF se dividen aproximadamente en 3 partes principales

1. ELF HEAD --Parte del encabezado del archivo ELF

2. Tabla de encabezados del programa --Tabla de encabezados del programa

3. Tabla de encabezados de sección: tabla de encabezados de sección

Esta parte se llama "encabezado" y describe aproximadamente la organización de este archivo. Tales como: archivo mágico, sistema de arquitectura de destino (como ARM, X86...), información de versión, tamaño de cada parte, dirección inicial desplazada de cada parte, etc.

Las posiciones que se describen a continuación son todas fijas y las posiciones siguen inmediatamente a la siguiente parte. (Señale cualquier error)

Aquí estoy usando el archivo android_server de IDA como demostración para ver brevemente parte del contenido.

Información de identificación del archivo (e_ident): primeros 16 bytes (incluida la parte mágica: primeros 4 bytes como .ELF)

Tipo de archivo (e_type): 2 bytes

p >

Arquitectura de destino (e_machine): 2 bytes

Versión (e_version): 4 bytes

Dirección virtual de entrada del programa (e_entry): 4 bytes

Dirección de desplazamiento de la tabla de encabezado del programa (e_phoff): 4 bytes

Dirección de desplazamiento de la tabla de encabezado de sección (e_shoff): 4 bytes

Guardar y archivar Indicadores relacionados específicos del procesador (e_flags): 4 bytes

Tamaño del encabezado ELF (e_ehsize): 2 bytes

Tamaño de cada tabla de encabezado del programa (e_phentsize): 2 bytes

Número de tablas de encabezado del programa (e_phnum): 2 bytes

Tamaño de cada tabla de encabezado de sección (e_shentsize): 2 bytes

Número de tablas de encabezado de sección (e_shnum): 2 bytes

Posición de la tabla de cadenas de sección (e_shstrndx): 2 bytes

... ...

La tabla de encabezado del programa describe la información de cada segmento del programa.

Veamos un ejemplo aquí

Por ejemplo, el encabezado del programa, la primera parte, esta parte describe la información del encabezado del programa, como tipo, tamaño, desplazamiento. , etc.; esta parte describe la información del encabezado del programa.

El número de secciones de información que hay en un programa depende de esta parte, la tabla de encabezados de secciones.

La más clásica es la información de función exportada aquí.