Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Pub] Outil d'analyse de code C

7 réponses
Avatar
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 ?

7 réponses

Avatar
espie
In article ,
Marc Boyer wrote:
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).
Avatar
Marc Boyer
On 2008-11-24, Marc Espie wrote:
In article ,
Marc Boyer wrote:
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 ?
Avatar
ld
On 24 nov, 15:01, Marc Boyer wrote:
On 2008-11-24, Marc Espie wrote:



> In article ,
> Marc Boyer   wrote:
>>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.
Avatar
espie
In article ,
Marc Boyer wrote:
On 2008-11-24, Marc Espie wrote:
In article ,
Marc Boyer wrote:
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 ?
Avatar
Marc Boyer
On 2008-11-24, ld wrote:
On 24 nov, 15:01, Marc Boyer wrote:
On 2008-11-24, Marc Espie wrote:



> In article ,
> Marc Boyer   wrote:
>>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 ?
Avatar
Marc Boyer
On 2008-11-24, Marc Espie wrote:
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 ?
Avatar
Jean-Marc Desperrier
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