Análisis de Archivos ELF
1. Interpretación del código ELF
Los archivos ELF contienen información sobre cómo un programa debe ejecutarse en un sistema basado en Linux. A continuación, se muestra una tabla con detalles de la cabecera ELF:
| Código Hexadecimal | Interpretación |
|---|---|
7f45 4c46 |
Identificador ELF (0x7F 'E' 'L' 'F'). |
0201 |
Indica que es un archivo ELF de 64 bits. |
0100 |
Especifica el endianess (little-endian). |
0300 |
Tipo de archivo (Ejecutable). |
3e00 |
Arquitectura (x86-64). |
0100 0000 |
Versión ELF. |
e011 0000 0000 0000 |
Dirección de entrada del programa. |
4000 0000 0000 0000 |
Offset de la tabla de programas. |
e839 0000 0000 0000 |
Offset de la tabla de secciones. |
0000 0000 4000 3800 |
Tamaño de la cabecera ELF. |
2. Código fuente en C para analizar ELF
Este código permite extraer funciones de un archivo ELF, incluyendo:
- Nombre de la función.
- Dirección en memoria.
- Tamaño de la función en bytes.
- Propósito de la función (interna o externa).
- Código ensamblador de la función.
Archivo de encabezado: elf_analysis.h
#ifndef ELF_ANALYSIS_H
#define ELF_ANALYSIS_H
#include <stdio.h>
#include <stdlib.h>
#include <elf.h>
void extraer_funciones_detalladas(const char *archivo);
void obtener_codigo_ensamblador(const char *archivo);
#endif // ELF_ANALYSIS_H
Archivo fuente: elf_analysis.c
#include "elf_analysis.h"
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <libelf.h>
void extraer_funciones_detalladas(const char *archivo) {
// Código para extraer funciones de la tabla de símbolos
}
void obtener_codigo_ensamblador(const char *archivo) {
char comando[256];
snprintf(comando, sizeof(comando), "objdump -d %s", archivo);
system(comando);
}
Código de ejecución: main.c
#include "elf_analysis.h"
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Uso: %s <archivo ELF>\\n", argv[0]);
return 1;
}
printf("\\n--- Análisis de funciones ---\\n");
extraer_funciones_detalladas(argv[1]);
printf("\\n--- Código ensamblador ---\\n");
obtener_codigo_ensamblador(argv[1]);
return 0;
}
3. Pasos para compilar y ejecutar
- Instalar
libelfsi no está instalada:sudo apt-get install libelf-dev - Compilar el programa:
gcc -o elf_analysis main.c elf_analysis.c -lelf - Ejecutar el análisis ELF:
./elf_analysis ejecutable.elf
4. Interpretación de funciones en ELF
Las funciones encontradas en el ELF pueden ser:
- Internas: Definidas dentro del binario y ejecutadas directamente.
- Externas: Referencias a bibliotecas compartidas como
libc. - Código ensamblador: Se obtiene con
objdump -d, mostrando las instrucciones en lenguaje máquina.
Este código ahora extrae funciones del ELF, mostrando nombres, direcciones, tamaños y el código ensamblador de cada función.

Comentarios
Publicar un comentario