Trasformare un file SQLite in un eseguibile: il trucco SELF
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Un pattern mette l'ID applicazione SQLite a 'SELF' e dispone sezioni ELF in tabelle, con un interprete C che le estrae ed esegue.
Imposta l’application ID di un file SQLite a “SELF” all’offset 68, largo 4 byte, e quel database diventa un eseguibile Linux. È il pattern descritto da Farid Zakaria e rilanciato da Simon Willison il 24 agosto 20261.
Il meccanismo usa un dettaglio del formato SQLite: il campo application ID a 68 byte dall’inizio file. Qui si scrive la stringa “SELF”, acronimo di Structured Executable & Linkable Format. Le componenti del formato eseguibile ELF vengono poi organizzate in più tabelle SQLite, secondo uno schema pensato per contenerle1.
Per eseguire quel “binario in un database” serve un interprete. È disponibile un “self-exec” scritto in C, che può estrarre ed eseguire le parti necessarie dal database1.
Willison spiega che si può legare questo pattern al kernel con un meccanismo di Linux chiamato binfmt_misc. In questo modo il sistema può eseguire automaticamente i file che corrispondono a quel pattern binario, delegandoli all’interprete. L’articolo mostra un esempio di registrazione che abbina il marcatore “SELF” alla posizione 68 al programma “self-exec”1.
L’esempio di registrazione è questo:
printf '%s\n' ':self:M:68:SELF::/usr/local/bin/self-exec:' \
> /proc/sys/fs/binfmt_misc/register
Willison osserva che Farid usa NixOS in questo contesto. Aggiunge che, senza NixOS, la registrazione “sembra” quella riportata sopra1.
Il cuore dell’idea è l’uso di SQLite come contenitore per i pezzi che compongono un ELF. Lo schema del database accoglie i vari componenti. Il campo application ID identifica i file che adottano questo layout, con il valore “SELF” alla posizione prevista. L’interprete “self-exec” legge il database ed esegue ciò che serve1.
Nel post, Willison attribuisce la tecnica a Farid Zakaria e la presenta nella sua sezione “Link Blog”. Indica il codice C dell’interprete e il modo in cui i componenti ELF si dispongono nelle tabelle del database, secondo lo schema previsto. La descrizione include anche l’uso di binfmt_misc per collegare il pattern a un handler dedicato1.
Con binfmt_misc si “insegna” al kernel a trattare un certo pattern binario in un modo specifico. In questo caso, a intercettare i file che presentano “SELF” a 68 byte e a passarli a “self-exec”. Willison propone una riga di configurazione che realizza questo collegamento, così che l’esecuzione avvenga senza un wrapper esterno1.
La combinazione dei tre elementi — application ID impostato a “SELF”, componenti ELF distribuiti in tabelle SQLite, interprete “self-exec” — consente di usare un database come eseguibile. Il passaggio tramite binfmt_misc automatizza l’avvio quando il sistema incontra il pattern definito1.
Fonti
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici
Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:
- Fedeltà alle fonti. Un secondo passaggio toglie ogni affermazione che le fonti non sostengono.
- Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale.
- Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica.
I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.
Per vedere Millebit nelle notizie principali di Google, aggiungilo alle tue fonti preferite. Oppure segui l’edizione di oggi, il feed RSS o La Sintesi.