This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux-kernel-dev:capitole:capitol-02 [2016/08/30 10:25] razvan [Actualizare modul de hook] |
linux-kernel-dev:capitole:capitol-02 [2016/08/30 12:18] (current) razvan [Informații cscope] |
||
---|---|---|---|
Line 113: | Line 113: | ||
Actualizați modulul ''hello.c'' pentru a afișa un mesaj și la descărcarea din kernel, la operația ''rmmod''. | Actualizați modulul ''hello.c'' pentru a afișa un mesaj și la descărcarea din kernel, la operația ''rmmod''. | ||
- | Folosiți funcția ''printk'' astfel încât mesajele să fie afișate în bufferul kernel-ului (adică să fie afișate cu ''dmesg'') dar să nu fie afișate la consolă. | + | Folosiți funcția ''printk'' astfel încât mesajele să fie afișate atât în bufferul kernel-ului (adică să fie afișate cu ''dmesg'') cât și la consolă. |
<note tip> | <note tip> | ||
Line 127: | Line 127: | ||
</note> | </note> | ||
+ | <note tip> | ||
+ | Pentru a include conținutul fișierului header ''include/linux/sched.h'' folosiți construcția | ||
+ | <code> | ||
+ | #include <linux/sched.h> | ||
+ | </code> | ||
+ | La fel veți proceda și în cazul altor fișiere de tip header în care sunt definite structuri, tipuri de date sau macro-uri pe care le folosiți în modulul vostru. | ||
+ | </note> | ||
==== Afișare comandă ==== | ==== Afișare comandă ==== | ||
Line 174: | Line 181: | ||
==== Modul nou din surse multiple ==== | ==== Modul nou din surse multiple ==== | ||
- | Creați un modul care să aibă două fișiere cod sursă. Într-un fișier cod sursă sunt implementate funcțiile de inițializare și ieșire ale modulului. În celălalt fișier implementați o funcție care face dump în hexacimal la cel mult 4096 de octeți de la o adresă dată. Adresa dată trebuie să fie adresă de kernel space (>= ''0xc0000000''). Funcția este apelată din primul modul. | + | Creați un modul care să aibă două fișiere cod sursă. Într-un fișier cod sursă sunt implementate funcțiile de inițializare și ieșire ale modulului. În celălalt fișier implementați o funcție care face dump în hexacimal la cel mult 4096 de octeți de la o adresă dată. Adresa dată trebuie să fie adresă de kernel space (>= ''0xc0000000''). Funcția este apelată din primul modul în cadrul funcției de inițializare a acestuia. |
Compilați modulul, copiați-l în mașina virtuală QEMU și testați-l. | Compilați modulul, copiați-l în mașina virtuală QEMU și testați-l. | ||
Line 183: | Line 190: | ||
<note tip> | <note tip> | ||
- | Pentru pachetele care pleacă folosiți ca ''hooknum'' valoarea ''NF_INET_LOCAL_OUT''. | + | Pentru pachetele care pleacă folosiți ca ''hooknum'' valoarea ''NF_INET_LOCAL_OUT''. Este vorba de câmpul ''hooknum'' din cadrul structura ''icmp_nf_ops''. |
Pachetele de tipul ''echo reply'' au câmpul ''icmp_type'' al structurii ''icmp_hdr'' egal cu valoarea ''ICMP_ECHOREPLY''. | Pachetele de tipul ''echo reply'' au câmpul ''icmp_type'' al structurii ''icmp_hdr'' egal cu valoarea ''ICMP_ECHOREPLY''. | ||
Line 252: | Line 259: | ||
Pentru o interfață mai simplă, [[http://sourceforge.net/projects/kscope/|Kscope]] este un frontend pentru cscope care foloseşte QT. Este lightweight, foarte rapid și foarte ușor de folosit. Permite căutare folosind expresii regulate, grafuri de apel etc. Kscope nu mai este, în momentul de fața, menținut. Există şi un [[https://opendesktop.org/content/show.php/Kscope4?content=156987|port]] al versiunii 1.6 pentru Qt4 şi KDE 4 care păstrează integrarea editorului Kate şi este mai uşor de folosit decât ultima versiune prezentă pe SourceForge. | Pentru o interfață mai simplă, [[http://sourceforge.net/projects/kscope/|Kscope]] este un frontend pentru cscope care foloseşte QT. Este lightweight, foarte rapid și foarte ușor de folosit. Permite căutare folosind expresii regulate, grafuri de apel etc. Kscope nu mai este, în momentul de fața, menținut. Există şi un [[https://opendesktop.org/content/show.php/Kscope4?content=156987|port]] al versiunii 1.6 pentru Qt4 şi KDE 4 care păstrează integrarea editorului Kate şi este mai uşor de folosit decât ultima versiune prezentă pe SourceForge. | ||
+ | <note important> | ||
+ | Dacă nu există deja un fișier ''cscope.out'' generat sau dacă s-a stricat, îl puteți genera folosind | ||
+ | <code> | ||
+ | make ARCH=x86 cscope | ||
+ | </code> | ||
+ | </note> | ||
==== cscope spelunking ==== | ==== cscope spelunking ==== | ||
Line 269: | Line 282: | ||
- Listați toate match-urile folosind, în Vim, comanda '':copen''. Vă apare o fereastră secundară cu toate match-urile. | - Listați toate match-urile folosind, în Vim, comanda '':copen''. Vă apare o fereastră secundară cu toate match-urile. | ||
- Căutați match-ul potrivit (în care este definită structura) căutând după acoladă deschisă (''{''), un caracter sigur pe linia de definire a structurii. Pentru căutarea acoladei deschise folosiți, în Vim, construcția ''/{''. | - Căutați match-ul potrivit (în care este definită structura) căutând după acoladă deschisă (''{''), un caracter sigur pe linia de definire a structurii. Pentru căutarea acoladei deschise folosiți, în Vim, construcția ''/{''. | ||
- | - Pe linia aferentă apăsați ''Enter'' ca să vă ajungă editorul în codul sursă unde e definită varibila. | + | - Pe linia aferentă apăsați ''Enter'' ca să vă ajungă editorul în codul sursă unde e definită variabila. |
- Închideți fereastra secundară folosind coamanda '':cclose''. | - Închideți fereastra secundară folosind coamanda '':cclose''. | ||
</note> | </note> |