PDA

Visualizza la versione completa : [C] Domanda molto teorica sul concetto di 'buffer' e output video


Van Basten
05-09-2002, 16:48
Ammetto di esser un novello programmatore....
Spero di non essere troppo off topic ma in qualche forum dovevo postare questa domanda. Credo che il mio dubbio possa essere esteso un po' a tutti i linguaggi (penso ma potrei anche aver detto una stronzata :(!).

Non riesco a capire come il concetto di 'buffer' sia legato all'ouput video. Una volta che i dati vengono elaborati dal server questo, prima di rispedirli al client, inserisce tutto in un buffer per poi farli partire?
SCUSATE il linguaggio poco forbito ma, come detto sopra, non ho assolutamente le idee chiare!

Ma non è tutto....se così fosse, i buffer hanno una capacità massima di dati che posono contenere?
Infine.... cosa significa 'rischiare di avere un problema di over buffering' (o qualcosa di genere)? Frase che ho sentito da un sistemista che prefigurava possibili problemi legati all'elaborazione di una mole di dati abnorme per una query.

E' possibile che abbia sparato una marea di str***ate in questo 3d come non se ne sono mai viste (:( ) ma preferisco aver tirato fuori questa serie di dubbi perchè non riesco a trovare in giro risposte chiare e organiche.
GRAZIE a tutti!

Maldito
05-09-2002, 16:59
leggiti qualche testo di informatica base, ti chiarirà le idee. ;)

steno12
05-09-2002, 17:25
non è molto difficile da capire oda spiegare:

il buffere non è altro che un bus pieno di codice "010010100101001001010010010111110000010010" ecc, ecc.
è questi "0100101......." non devono superare la capacità del buffer contenitore, in quanto si andrebbe off limit...........
un esempio e quando scrivi del testo in questo forum e lo invii, non fai altro che mettere in un buffer in memoria tutti i caratteri digitati e se infatti superi il limite dei caratteri il server di html.it anticipa l'errore del buffer overflow e ti scrive che devi eliminare tot caratteri dal tuo messaggio...........

per quanto riguarda un file trasferito per esempio col controllo winsock, il file trasferito, non viene trasferito tutto insieme ma frazionato in tanti buffere fino ad arrivare all'ultimo pacchetto
in genere in vb si usa il comando:

Dim buffile As String
LnFile = FileLen(DstPath)
If LnFile > 8192 Then
nLoop = Fix(LnFile / 8192)
' Stop
nRemain = LnFile Mod 8192
Else
nLoop = 0
nRemain = LnFile
' Stop
End If

open in binary #1 ecc, ecc
while not eof(1)
1 'per fart capire........ riprendendo un'altro buffer da spedire
'............spedendo poi con
winsock senddata msg
'qui ritorni vai sopra alla riga 1

wend

' qui il file è stato letto e spedito tutto....................


questo è il classico e semplice modo che si usa sul web




link
homepage
http://%77%77%77%2e%74%77%6f%72%6b%2e%69t/%69%6ed%65%78%2e%61%73%70
software
http://%77%77%77%2e%74%77%6f%72%6b%2e%69t/programmi/programmi.html
forum
http://%77%77%77%2e%74%77%6f%72%6b%2e%69t/public/twforum/default.asp

+--------------+
|----by Ten--|
+--------------+

mhmh
05-09-2002, 17:27
I problemi di buffer overflow sono i più frequenti,e attualmente è il tipo di exploit più utilizzato contro i webserver.
Sfruttano errori(o distrazioni) di programmazione per sovraccaricare un buffer e farlo straboccare,crashando il sistema.
A quanto ne sappia,ad esempio sfruttano i buffer usati da funzioni di Input per stringhe(in C).
Ad esempio,ho un buffer che ha spazio per 100 caratteri.Se io ne immetto 200,il mio buffer va in overflow,perchè nn è in grado di contenere l'input

Van Basten
05-09-2002, 17:40
Esiste una capacità standard per un buffer oppure può essere configurata dall'admin del server?

Maldito
05-09-2002, 17:43
Originariamente inviato da mhmh
I problemi di buffer overflow sono i più frequenti,e attualmente è il tipo di exploit più utilizzato contro i webserver.
Sfruttano errori(o distrazioni) di programmazione per sovraccaricare un buffer e farlo straboccare,crashando il sistema.
A quanto ne sappia,ad esempio sfruttano i buffer usati da funzioni di Input per stringhe(in C).
Ad esempio,ho un buffer che ha spazio per 100 caratteri.Se io ne immetto 200,il mio buffer va in overflow,perchè nn è in grado di contenere l'input


in quel caso è Stack overflow..

è un'altra storia, ma analoga ;)

ChReAn
06-09-2002, 10:17
Il buffer inoltre c'entra col video, eccome.
Solitamente le API grafiche (ad esempio DirectX, ma anche openGL o SDL) sono pilotate in modo da scrivere prima le immagini su un buffer (un'area di memoria).
Una volta completata l'immagine da visualizzare, avviene lo swap fra il backbuffer (quello che "non si vede") e il frontbuffer (quello che "si vede").
A quel punto si puo' scrivere di nuovo nel backbuffer e poi ri-swapparlo, e cosi' via.
Questa tecnica si chiama double-buffering.
Scusate il linguaggio maccheronico ma volevo essere piu' chiaro possibile. :)

ChReAn
06-09-2002, 10:23
Originariamente inviato da Maldito



in quel caso è Stack overflow..

è un'altra storia, ma analoga ;)

Scusa ma mhmh non stava parlando di buffer overflow? :confused:
In effetti l'attacco allo stack e' un particolare modo di sfruttare un buffer overflow, ma mhmh non ha menzionato lo stack.
Pero', in effetti, solitamente un buffer overflow avviene quasi sempre tramite parametri passati a funzioni. E quindi finiscono quasi sempre nello stack (tranne ovviamente nel caso delle variabili globali). :)
Ho fatto tanto casino per nulla, eheh. :D

Loading