Les quines

Aujourd’hui commençons par un petit programme

1
2
3
4
5
6
7
8
9
10
11
  #!/bin/sh
  quine () {
  echo -e "#!/bin/sh\n$1"
  echo "quine '$1'"
  }

  quine 'quine () {
  echo -e "#!/bin/sh\\n$1"
  echo "quine \047$1\047"
  }
  '

Pouvez vous devinez que fais ce programme ?

Une quine est un code donc la sortie est exactement son code source.

Cela ressemble à une exercice de programmation.

Mais toute en quelque sorte peuvent se résumer à l’idée suivante.

Écrivez, puis écrivez entre guillemets et suivi d’un point, « Écrivez, puis écrivez entre guillemets et suivi d’un point, ».

Le code python suivant est une interprétation littérale.

1
a='a=%r;print(a%%a)';print(a%a)

En php

1
<?$a='<?$a=%c%s%c;printf($a,39,$a,39);';printf($a,39,$a,39);

Seulement possible en php

1
2
<?php
echo file_get_contents(__FILE__);

A quoi cela sert ?

On parle de code qui se réplique. Il existe une quine dans tout les langages de programmations complets(c’est à dire turing-complet). Une des applications les plus curieuses est l’injection de code malicieux dans les compilateurs. C’est un des papiers les plus célèbres de Ken Thompson (Inventeur de B, Unix, UTF8, Go bref un monstre..). C’est un publication académique très facilement lisible et qui ne fait que trois pages. Il décrit une méthode d’injection dans le compilateur lui-même pour créer un compilateur infecté. Le plus bizarre dans cette histoire est que cette attaque est théorique. Mais personne n’y croyait. Il existe pourtant réellement un virus qui utilise cette faille.

Des liens et bibliographie.

Il y a un chapitre complet dans le Gödel Escher Bach quelques phrases issues de ce livre passionnant

“est un fragment de phrase” est un fragment de phrase

“se compose de cinq mots” se compose de cinq mots

“Donne une fausseté si précédée d’elle-même entre guillemets” Donne une fausseté si précédée d’elle-même entre guillemets.

Cette dernière est de W. V. Quine qui est la première personne à écrire dessus et qui donne le noms de quine.

la plupart des exemples viens de l’article quine sur Wikipedia. Voir aussi quine sur c2.com