Per "format string" in lingua inglese si intende una stringa di caratteri contenente testo in chiaro e/o regole per la conversione di valori da codice a testo leggibile.

Programmazione (ANSI C)

modifica

Le format string vengono molto utilizzate nella programmazione, in particolare nel linguaggio C dove le troviamo in decine di funzioni standard come ad esempio:

  • printf() e derivate come fprintf(), sprintf(), vprintf() ecc..
  • syslog()
  • perror()

Composizione

modifica

La composizione di una format string prevede l'uso di una Format Function e di un testo da passare in output:

    printf("il valore di VAR è = %d\n", var);

in questo caso la format function è printf() e la format string è "il valore di VAR è = %d\n". Quest'ultima è composta da un testo e da uno o più parametri (distinguibili dal segno %) da convertire in ASCII, questi parametri possono fornirci diversi valori, da semplici numeri, a stringhe di caratteri, sino a posizioni di memoria. Tra i più utilizzati abbiamo:

Parametro Valore di ritorno Tipo di dato
%d numero decimale int
%u numero decimale positivo unsigned int
%o numero ottale unsigned int
%x numero esadecimale unsigned int
%s stringa di caratteri char *
%n numero decimale relativo ai byte nella format string scritti prima della richiesta al parametro

Meccanismo di funzionamento

modifica

I processi per l'elaborazione di una format string, prevedono il salvataggio della stringa (e degli eventuali parametri) all'interno dello Stack (via utilizzo dell'istruzione assembly push) da parte della funzione chiamante la format function.

Quest'ultima funzione una volta passatogli il controllo del processo si limiterà a prelevare (via utilizzo dell'istruzione assembly pop) la format string precedentemente salvata nello stack, per poi interpretarla e prelevare (solo se presenti) gli elementi da convertire (identificati dal carattere %).

Si ottiene dunque uno schema di quattro passaggi fondamentali (oltre a due facoltativi):

  1. salvataggio nello stack degli eventuali parametri (push)
  2. salvataggio nello stack della posizione in memoria contenente la format string (push)
  3. chiamata alla Format Function (call)
  4. prelievo dallo stack della format string (pop)
  5. analisi della stessa
  6. eventuale prelievo dei parametri (solo se presenti)

Voci correlate

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica

📚 Artikel Terkait di Wikipedia

Format string attack

Le format string attack (vulnerabilità di formato della stringa) sono una classe di vulnerabilità scoperte nel 1999. Il tipo di attacco Format String è

Printf

simile al seguente: int printf(const char *format, ...) Il parametro format è una stringa che descrive il formato da seguire nell'output e che utilizza delle

Scanf

funzioni che accederebbero successivamente al buffer. L'argomento format è una stringa che specifica l'interpretazione dell'input e può contenere una o

Data Analysis Expressions

per colonne calcolate, tabelle calcolate, misure, gruppi di calcolo, format string personalizzate, ed espressioni filtro. In ambiente Power BI, DAX è usato

Exploit

tipo di vulnerabilità che sfruttano: buffer overflow, Heap Overflow, format string attacks, race condition, double free(), Integer overflow, SQL injection

PL/SQL

le stringhe in date. Ad esempio: to_date('31-12-2004','dd-mm-yyyy') Per convertire le date in testo si può usare la funzione to_char ( date, format_string

SQL injection

Metasploit Project OWASP Open Web Application Security Project Uncontrolled format string w3af Web application security XML external entity (EN) Opere riguardanti

Libreria standard C++

std::format. <string> Fornisce the C++ standard string classes and templates. <string_view> Novità in C++17. Fornisce class template std::basic_string_view