LKMPG: Fasi preliminari: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Riga 25: Riga 25:


con <b>gcc -Wall -o hello hello.c</b>. Esegui il programma con <b>strace ./hello</b>. Sei impressionato? Ogni linea che vedi corrisponde ad una syscall. strace[4] è un comodo programma che ti dà i dettagli su quali syscall il programma chiama, come una chiamata è fatta, quali sono gli argomenti e cosa ritorna. E' uno strumento inestimabile per capire cose come a quali file un programma sta provando ad accedere. Verso la fine, vedrai una linea come <code>write(1, "hello", 5hello)</code>. Questo è. La faccia dietro la maschera <code>printf()</code>. Potresti non essere familiare con <code>write()</code> poichè molte persone usano le funzioni di libreria per le operazioni di I/O su file (come <code>fopen</code>,<code>fputs</code>, <code>fclose</code>). Se questo è il caso, prova a dare uno sguardo a <b>man 2 write</b>. La seconda sezione del man è dedicata alle chiamate di sistema (come <code>kill()</code> e <code>read()</code>). La terza sezione del manuale è dedicata alle chiamate di libreria, alle quali probabilmente siete molto più abituati (come <code>cosh()</code> e <code>random()</code>).
con <b>gcc -Wall -o hello hello.c</b>. Esegui il programma con <b>strace ./hello</b>. Sei impressionato? Ogni linea che vedi corrisponde ad una syscall. strace[4] è un comodo programma che ti dà i dettagli su quali syscall il programma chiama, come una chiamata è fatta, quali sono gli argomenti e cosa ritorna. E' uno strumento inestimabile per capire cose come a quali file un programma sta provando ad accedere. Verso la fine, vedrai una linea come <code>write(1, "hello", 5hello)</code>. Questo è. La faccia dietro la maschera <code>printf()</code>. Potresti non essere familiare con <code>write()</code> poichè molte persone usano le funzioni di libreria per le operazioni di I/O su file (come <code>fopen</code>,<code>fputs</code>, <code>fclose</code>). Se questo è il caso, prova a dare uno sguardo a <b>man 2 write</b>. La seconda sezione del man è dedicata alle chiamate di sistema (come <code>kill()</code> e <code>read()</code>). La terza sezione del manuale è dedicata alle chiamate di libreria, alle quali probabilmente siete molto più abituati (come <code>cosh()</code> e <code>random()</code>).
Puoi anche scrivere moduli per rimpiazzare le syscall, come faremo a breve. I crackers spesso fanno uso di questo tipo di cose per eseguire backdoors o trojan, ma puoi scrivere il tuo modulo per fare come benigne, come stampare <i>Tee hee, fa il solletico!</i> ogni volta che qualcuno prova a cancellare un file sul tuo sistema.


===User Space vs Kernel Space===
===User Space vs Kernel Space===