X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filestd.tex;h=db18e5d454230071849b1a7776ca788747c48d57;hp=8a8ed6fd9583e37a91f50c3de1ba9e6aedf96602;hb=66e83c068629844f84fe4a0d44b382f756c9ef32;hpb=406973e35011347c3812c671511ce738378a525b diff --git a/filestd.tex b/filestd.tex index 8a8ed6f..db18e5d 100644 --- a/filestd.tex +++ b/filestd.tex @@ -1,6 +1,6 @@ %% filestd.tex %% -%% Copyright (C) 2000-2004 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -747,9 +747,10 @@ viene restituito un \val{NULL}, ed il buffer \param{buf} non viene toccato. L'uso di \func{gets} è deprecato e deve essere assolutamente evitato; la funzione infatti non controlla il numero di byte letti, per cui nel caso la stringa letta superi le dimensioni del buffer, si avrà un \textit{buffer - overflow}\index{buffer overflow}, con sovrascrittura della memoria del -processo adiacente al buffer.\footnote{questa tecnica è spiegata in dettaglio - e con molta efficacia nell'ormai famoso articolo di Aleph1 \cite{StS}.} + overflow}\index{\textit{buffer~overflow}}, con sovrascrittura della memoria +del processo adiacente al buffer.\footnote{questa tecnica è spiegata in + dettaglio e con molta efficacia nell'ormai famoso articolo di Aleph1 + \cite{StS}.} Questa è una delle vulnerabilità più sfruttate per guadagnare accessi non autorizzati al sistema (i cosiddetti \textit{exploit}), basta @@ -870,14 +871,14 @@ come per entrambi i parametri si siano usati dei dei puntatori anziché i valori delle variabili, secondo la tecnica spiegata in sez.~\ref{sec:proc_var_passing}). -Se si passa alla funzione l'indirizzo di un puntatore impostato a \val{NULL} -e \var{*n} è zero, la funzione provvede da sola all'allocazione della memoria +Se si passa alla funzione l'indirizzo di un puntatore impostato a \val{NULL} e +\var{*n} è zero, la funzione provvede da sola all'allocazione della memoria necessaria a contenere la linea. In tutti i casi si ottiene dalla funzione un puntatore all'inizio del testo della linea letta. Un esempio di codice può -essere il seguente: -\includecodesnip{listati/getline.c} -e per evitare memory leak\index{memory leak} occorre ricordarsi di liberare -\var{ptr} con una \func{free}. +essere il seguente: +\includecodesnip{listati/getline.c} +e per evitare memory leak\index{\textit{memory~leak}} occorre ricordarsi di +liberare \var{ptr} con una \func{free}. Il valore di ritorno della funzione indica il numero di caratteri letti dallo stream (quindi compreso il newline, ma non lo zero di @@ -926,13 +927,14 @@ L'output formattato viene eseguito con una delle 13 funzioni della famiglia \bodydesc{Le funzioni ritornano il numero di caratteri stampati.} \end{functions} -\noindent le prime due servono per stampare su file (lo standard output -o quello specificato) la terza permette di stampare su una stringa, in genere +\noindent le prime due servono per stampare su file (lo standard output o +quello specificato) la terza permette di stampare su una stringa, in genere l'uso di \func{sprintf} è sconsigliato in quanto è possibile, se non si ha la sicurezza assoluta sulle dimensioni del risultato della stampa, eccedere le dimensioni di \param{str}, con conseguente sovrascrittura di altre variabili e -possibili \textit{buffer overflow}\index{buffer overflow}; per questo motivo -si consiglia l'uso dell'alternativa \funcd{snprintf}, il cui prototipo è: +possibili \textit{buffer overflow}\index{\textit{buffer~overflow}}; per questo +motivo si consiglia l'uso dell'alternativa \funcd{snprintf}, il cui prototipo +è: \begin{prototype}{stdio.h} {snprintf(char *str, size\_t size, const char *format, ...)} Identica a \func{sprintf}, ma non scrive su \param{str} più di @@ -1116,7 +1118,8 @@ scritti sulla stringa di destinazione: Identica a \func{vsprintf}, ma non scrive su \param{str} più di \param{size} caratteri. \end{prototype} -\noindent in modo da evitare possibili buffer overflow\index{buffer overflow}. +\noindent in modo da evitare possibili buffer +overflow\index{\textit{buffer~overflow}}. Per eliminare alla radice questi problemi, le \acr{glibc} supportano una @@ -1145,7 +1148,7 @@ proposito dei \index{\textit{value~result~argument}}\textit{value result argument}) l'indirizzo della stringa allocata automaticamente dalle funzioni. Occorre inoltre ricordarsi di invocare \func{free} per liberare detto puntatore quando la stringa non serve più, onde evitare memory -leak\index{memory leak}. +leak\index{\textit{memory~leak}}. Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e \func{vdprintf}, che prendono un file descriptor al posto dello stream. Altre @@ -1228,7 +1231,7 @@ punto prestabilito; sempre che l'operazione di riposizionamento sia supportata dal file sottostante lo stream, quando cioè si ha a che fare con quello che viene detto un file ad \textsl{accesso casuale}.\footnote{dato che in un sistema Unix esistono vari tipi di file, come le fifo ed i file di - dispositivo\index{file!di dispositivo}, non è scontato che questo sia sempre + dispositivo\index{file!di~dispositivo}, non è scontato che questo sia sempre vero.} In GNU/Linux ed in generale in ogni sistema unix-like la posizione nel file è