[Pub] Outil d'analyse de code C

Le
Marc Boyer
Bonjour à tous,

un peu de pub. Je sors d'une présentation de l'outil
coccinelle. C'est un truc qui fait de la détection
de patern suspect dans un code (un kmalloc sans
le kfree associé par exemple).

Pour ceux que les avancées sur l'analyse de code C
intéressent.

http://www.emn.fr/x-info/coccinelle/

Marc Boyer
--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
espie
Le #17945341
In article Marc Boyer
Bonjour à tous,

un peu de pub. Je sors d'une présentation de l'outil
coccinelle. C'est un truc qui fait de la détection
de patern suspect dans un code (un kmalloc sans
le kfree associé par exemple).

Pour ceux que les avancées sur l'analyse de code C
intéressent.

http://www.emn.fr/x-info/coccinelle/



Au premier abord, ca ressemble tres fort au type de techniques utilisees
par splint (pas mal de rajouts d'annotations semantiques pour avoir les
warnings qui vont bien).
Marc Boyer
Le #17945611
On 2008-11-24, Marc Espie
In article Marc Boyer
Bonjour à tous,

un peu de pub. Je sors d'une présentation de l'outil
coccinelle. C'est un truc qui fait de la détection
de patern suspect dans un code (un kmalloc sans
le kfree associé par exemple).

Pour ceux que les avancées sur l'analyse de code C
intéressent.

http://www.emn.fr/x-info/coccinelle/



Au premier abord, ca ressemble tres fort au type de techniques utilisees
par splint (pas mal de rajouts d'annotations semantiques pour avoir les
warnings qui vont bien).



Je ne crois pas non.
Splint permet d'ajouter des annotations dans le code. Ici, on
ne touche pas au code, on fait de la recherche de motif (une
sorte de super sed/awk).
Coccinelle est d'abord fait pour rechercher des motifs et y appliquer
les patchs. Mais en fait, on peut utiliser la recherche de motifs
pour chercher du code suspect.

Marc Boyer
--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
ld
Le #17946271
On 24 nov, 15:01, Marc Boyer
On 2008-11-24, Marc Espie


> In article > Marc Boyer   >>Bonjour à tous,

>>un peu de pub. Je sors d'une présentation de l'outil
>>coccinelle. C'est un truc qui fait de la détection
>>de patern suspect dans un code (un kmalloc sans
>>le kfree associé par exemple).

>>Pour ceux que les avancées sur l'analyse de code C
>>intéressent.

>>  http://www.emn.fr/x-info/coccinelle/

> Au premier abord, ca ressemble tres fort au type de techniques utilisee s
> par splint (pas mal de rajouts d'annotations semantiques pour avoir les
> warnings qui vont bien).

  Je ne crois pas non.
  Splint permet d'ajouter des annotations dans le code. Ici, on
ne touche pas au code, on fait de la recherche de motif (une
sorte de super sed/awk).



je dirais plutot une sorte de super diff/patch

a+, ld.
espie
Le #17946261
In article Marc Boyer
On 2008-11-24, Marc Espie
In article Marc Boyer
Bonjour à tous,

un peu de pub. Je sors d'une présentation de l'outil
coccinelle. C'est un truc qui fait de la détection
de patern suspect dans un code (un kmalloc sans
le kfree associé par exemple).

Pour ceux que les avancées sur l'analyse de code C
intéressent.

http://www.emn.fr/x-info/coccinelle/



Au premier abord, ca ressemble tres fort au type de techniques utilisees
par splint (pas mal de rajouts d'annotations semantiques pour avoir les
warnings qui vont bien).



Je ne crois pas non.
Splint permet d'ajouter des annotations dans le code. Ici, on
ne touche pas au code, on fait de la recherche de motif (une
sorte de super sed/awk).
Coccinelle est d'abord fait pour rechercher des motifs et y appliquer
les patchs. Mais en fait, on peut utiliser la recherche de motifs
pour chercher du code suspect.



C'est quoi ces bouts de machin supplementaires que j'ai vu sur les patchs
presentes sur la page de coccinelle, alors ?
Marc Boyer
Le #17946401
On 2008-11-24, ld
On 24 nov, 15:01, Marc Boyer
On 2008-11-24, Marc Espie


> In article > Marc Boyer   >>Bonjour à tous,

>>un peu de pub. Je sors d'une présentation de l'outil
>>coccinelle. C'est un truc qui fait de la détection
>>de patern suspect dans un code (un kmalloc sans
>>le kfree associé par exemple).

>>Pour ceux que les avancées sur l'analyse de code C
>>intéressent.

>>  http://www.emn.fr/x-info/coccinelle/

> Au premier abord, ca ressemble tres fort au type de techniques utilisees
> par splint (pas mal de rajouts d'annotations semantiques pour avoir les
> warnings qui vont bien).

  Je ne crois pas non.
  Splint permet d'ajouter des annotations dans le code. Ici, on
ne touche pas au code, on fait de la recherche de motif (une
sorte de super sed/awk).



je dirais plutot une sorte de super diff/patch



Oui, mais qu'on finit par appliquer à la recherche de bug.
Voir http://www.emn.fr/x-info/coccinelle/stuart_thesis.pdf
et, p56 "5.2 Splint, Valgrind and the other code-bases"


Marc

--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
Marc Boyer
Le #17946391
On 2008-11-24, Marc Espie
Au premier abord, ca ressemble tres fort au type de techniques utilisees
par splint (pas mal de rajouts d'annotations semantiques pour avoir les
warnings qui vont bien).



Je ne crois pas non.
Splint permet d'ajouter des annotations dans le code. Ici, on
ne touche pas au code, on fait de la recherche de motif (une
sorte de super sed/awk).
Coccinelle est d'abord fait pour rechercher des motifs et y appliquer
les patchs. Mais en fait, on peut utiliser la recherche de motifs
pour chercher du code suspect.



C'est quoi ces bouts de machin supplementaires que j'ai vu sur les patchs
presentes sur la page de coccinelle, alors ?



Tu parles de quoi ? Les choses du genre
------------------------------------------------
@@
expression lock, flags;
expression urb;
@@

spin_lock_irqsave(lock, flags);
<...
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_ATOMIC)
...>
spin_unlock_irqrestore(lock, flags);
------------------------------------------------

Ça, ça veut dire: "partout ou tu vois un appel
usb_submit_urb(urb) encadré par un spin_lock/splin_unlock,
rajoute un paramètre GFP_ATOMIC". Les trucs entre @@ décrivent
les variables du patern.
Et cette chose là ne se met pas *dans* le code à analyser.

Marc Boyer
--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
Jean-Marc Desperrier
Le #17976471
Marc Boyer wrote:
[...]
un peu de pub. Je sors d'une présentation de l'outil
coccinelle. C'est un truc qui fait de la détection
de patern suspect dans un code (un kmalloc sans
le kfree associé par exemple).

Pour ceux que les avancées sur l'analyse de code C
intéressent.

http://www.emn.fr/x-info/coccinelle/



Hum, franchement aujourd'hui, je pense que ce type d'outils a peu de
perspectives d'avenir, quand on voit les perspectives qu'ouvrent
Dehydra, Treehydra (diagnostique), et Oink/Pork (réécriture) dans le
domaine.

https://developer.mozilla.org/en/Dehydra
https://developer.mozilla.org/en/Treehydra
https://developer.mozilla.org/en/Pork
http://www.cubewano.org/oink

Un "super diff/patch" n'a plus trop d'avenir quand il existe par
ailleurs des outils qui s'appuient sur gcc (un parseur C/C++ indépendant
pour Oink/Pork) pour travailler avec la structure interprétée *exacte*
du code.

Il y a quelques exemples d'utilisation ici:
http://hg.mozilla.org/mozilla-central/file/fdd5e4e34241/xpcom/analysis/

L'un des gros trucs qui est fait actuellement avec ces outils dans le
code Mozilla est de s'assurer qu'une fonction soit retourne un code
d'erreur OK et fixe la valeur de tous les arguments, ou bien renvoie un
code d'erreur et ne touche à aucun argument en sortie.

Voir à ce sujet la description de la technique ESP pour analyser le flux
d'une fonction en temps polynomial:
http://www.cs.cornell.edu/courses/cs711/2005fa/papers/dls-pldi02.pdf
https://developer.mozilla.org/Treehydra_Manual#section_8

Je pense que ces outils ne peuvent que prendre beaucoup d'importance,
car le fait qu'ils donnent des résultats exacts (au besoin, en
s'appuyant sur des techniques de récursivité) change complètement la
perspective.

Suivi redirigé vers fr.comp.developpement
Publicité
Poster une réponse
Anonyme