Opinioni sul web

Google
Tux

Il kernel di Linux

Alla pagina kernel Linux si trova una presentazione, suddivisa per argomenti, delle caratteristiche e delle funzioni del kernel di Linux.

Non sono stati tradotti i termini che sono divenuti ormai di uso comune nella nostra lingua, almeno nel gergo tecnico, e quelle espressioni che solo in inglese mantengono il loro significato.

Ogni segnalazione di errori ed espressioni improprie è gradita.

ELF - Executable and Linking Format

La pagina standard ELF contiene una analisi del formato di file eseguibile ELF (Executable and Linking Format) tradotta dallo standard TIS (Tool Interface Standards) versione 1.2 del formato.

ANALISI di un FILE ELF

Questo breve testo riporta una analisi del formato di file ELF eseguita con i programmi readelf, hexdump e objdump, tratta da documenti presenti in rete rielaborati e integrati.

La spiegazione presuppone la conoscenza delle basi dello standard del formato riportate nella pagina standard ELF.

Per iniziare scriviamo e compiliamo un programma di prova.

#include <stdio.h>

int var_globale_1 = 3;
int var_globale_2;

int funzione_vuota(void) {
printf("buongiorno\n");
return 0;
}
int main(){
int var_locale = 6;
funzione_vuota();
printf("var_globale_1 = %d\n", var_globale_1);
printf("var_globale_2 = %d\n", var_globale_2);
printf("var_locale = %d\n", var_locale);
return 0;
}

$ gcc -o prova prova.c

Header ELF

Usando il programma readelf, contenuto nel pacchetto binutils, possiamo visualizzare l' header ELF

$ readelf -h prova

ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class:   ELF32
Data:   2's complement, little endian
Version:   1 (current)
OS/ABI:   UNIX - System V
ABI Version:   0
Type:   EXEC (Executable file)
Machine:   Intel 80386
Version:   0x1
Entry point address:   0x8048310
Start of program headers:   52 (bytes into file)
Start of section headers:   2856 (bytes into file)
Flags:   0x0
Size of this header:   52 (bytes)
Size of program headers:   32 (bytes)
Number of program headers:   8
Size of section headers:   40 (bytes)
Number of section headers:   35
Section header string table index:   32

Una visione dell'header in esadecimale si ottiene con

$ hexdump -C prova | head -n 6 (head filtra le prime 6 righe dell'output di hexdump)

00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 03 00 01 00 00 00 10 83 04 08 34 00 00 00 |............4...|
00000020 28 0b 00 00 00 00 00 00 34 00 20 00 08 00 28 00 |(.......4. ...(.|
00000030 23 00 20 00 06 00 00 00 34 00 00 00 34 80 04 08 |#. .....4...4...|
00000040 34 80 04 08 00 01 00 00 00 01 00 00 05 00 00 00 |4...............|
00000050 04 00 00 00 03 00 00 00 34 01 00 00 34 81 04 08 |........4...4...|

Ritroviamo gli stessi dati, ovviamente coi numeri in formato little-endian, per cui 0x8048310 diventa 10 83 04 08. continua la lettura

Per osservazioni: and.cassani@gmail.com

Opinioni ... di qualche tempo fa ma sempre valide


2010-04-24 10:25:58