<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3843526007960355155</id><updated>2011-04-22T05:10:38.050+02:00</updated><category term='ubuntu'/><category term='Programmation'/><category term='divers'/><category term='Les news'/><category term='Sécurité informatique'/><title type='text'>code-linux</title><subtitle type='html'>-= IN TH3 H3ART OF TH3 SYST3M =-</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-8011333261631671292</id><published>2008-11-22T10:15:00.012+01:00</published><updated>2009-01-19T09:08:08.487+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>Détournement du flux d' execution d' un programme</title><content type='html'>Ici je vais m' interreser au détournement du flux d' execution d' un programme en C, on s' apercois que c' est assez simple de faire sauter le programme a une adresse choisi et de lui faire executer le code, a condition biensur d' avoir une faille de type "buffer overflow" dans le programme.Voici le code qui va me permettre de le faire:&lt;br /&gt;&lt;p class="shell"&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;      void copier(char *chaine){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char buffer[50];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcpy(buffer, chaine);&lt;br /&gt;}&lt;br /&gt;      void detourne(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      printf("-== OPERATION REUSSI ==-\n");&lt;br /&gt;      }&lt;br /&gt;      int main(int argc, char **argv){&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(argc &lt; 2){&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fprintf(stderr, "hey donne un argument !!\n");&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(EXIT_FAILURE);&lt;br /&gt;      } else {&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copier(argv[1]);&lt;br /&gt;      }&lt;br /&gt;      return EXIT_SUCCESS;&lt;br /&gt;      }&lt;/p&gt;&lt;br /&gt;j' ai volontairement écris la fonction copier() qui apel la fonction strcpy() et biensur strcpy() ne controle pas le nombre de caractères qui va être écris dans la variable buffer qui elle ne peut en contenir que 50.&lt;br /&gt;Voila le résultat que j' obtient en envoyant 54 'A' + l' adresse de la fonction detourne dans argv[1] :&lt;br /&gt;&lt;div class="shell"&gt;$ ./bof $(perl -e 'print "A" x 54 . "\x4e\x84\x04\x08"')&lt;br /&gt;-== OPERATION REUSSI ==-&lt;br /&gt;Erreur de segmentation&lt;/div&gt;&lt;br /&gt;Tout marche bien comme prévu le programme en écrasant les 8 octets suivant le buffer en mémoire a bien sauté a l' adresse de la fonction détourne.&lt;br /&gt;Je pourrais m' arreter la mais il reste quand même beaucoup de questions sans réponse, qu' est ce que j' ai éraser exactement ?&lt;br /&gt;&lt;br /&gt;En ce penchant sur l' assembleur on voit que le processeur a plusieur registres, celui qui nous intéresse ici est le registre EIP, ce registre contient toujour l' adresse de la prochaine instruction a executer, juste avec cette info on peut deja imaginer ce qu' il c' est passé.&lt;br /&gt;A l' apel de la fonction copier(), il va ce créer un bloc d' activation pour cette fonction, c' est à dire un espace mémoire (stack ou pile) ou sera stocké le contexte de la fonction, les variables locales (buffer), l' ancien debut du bloc d' activation de la fonction appelante (EBP), puis l' adresse de retour de la fonction (EIP) dans l' ordre. On peut representer simplement la mémoire de cette facon:&lt;br /&gt;[ buffer | EBP | EIP ]&lt;br /&gt;Comme je l' ai dit au dessus EIP contient l' adresse de la prochaine instruction à executer, donc maintenant on peut comprendre pourquoi j' ai du envoyer 54 'A' + l' adresse de la fonction detourne().&lt;br /&gt;Mes 50 premier 'A' on rempli le buffer, j' en est rajouté 4 pour écraser EBP et j' ai rajouté l' adresse de la fonction detourne() qui est sur 4 octets aussi.Donc après avoir copié tout ca dans le buffer la mémoire peut être representez comme ca:&lt;br /&gt;[ AAAAAAAAAA | AAAA | adresse de la fonction detourne ]&lt;br /&gt;&lt;br /&gt;Pour trouver l' adresse de la fonction detourne je ne me suis pas embeter :&lt;br /&gt;&lt;div class="shell"&gt;$ nm ./bof&lt;br /&gt;080495dc d _DYNAMIC&lt;br /&gt;080496b0 d _GLOBAL_OFFSET_TABLE_&lt;br /&gt;0804858c R _IO_stdin_used&lt;br /&gt;         w _Jv_RegisterClasses&lt;br /&gt;080495cc d __CTOR_END__&lt;br /&gt;080495c8 d __CTOR_LIST__&lt;br /&gt;080495d4 d __DTOR_END__&lt;br /&gt;080495d0 d __DTOR_LIST__&lt;br /&gt;080485c4 r __FRAME_END__&lt;br /&gt;080495d8 d __JCR_END__&lt;br /&gt;080495d8 d __JCR_LIST__&lt;br /&gt;080496e0 A __bss_start&lt;br /&gt;080496d4 D __data_start&lt;br /&gt;08048540 t __do_global_ctors_aux&lt;br /&gt;080483e0 t __do_global_dtors_aux&lt;br /&gt;080496d8 D __dso_handle&lt;br /&gt;         w __gmon_start__&lt;br /&gt;0804853a T __i686.get_pc_thunk.bx&lt;br /&gt;080495c8 d __init_array_end&lt;br /&gt;080495c8 d __init_array_start&lt;br /&gt;080484d0 T __libc_csu_fini&lt;br /&gt;080484e0 T __libc_csu_init&lt;br /&gt;         U __libc_start_main@@GLIBC_2.0&lt;br /&gt;080496e0 A _edata&lt;br /&gt;080496e8 A _end&lt;br /&gt;0804856c T _fini&lt;br /&gt;08048588 R _fp_hw&lt;br /&gt;0804830c T _init&lt;br /&gt;080483b0 T _start&lt;br /&gt;080496e4 b completed.5843&lt;br /&gt;08048434 T copier&lt;br /&gt;080496d4 W data_start&lt;br /&gt;0804844e T detourne      &lt;--- l' adresse ici&lt;br /&gt;         U exit@@GLIBC_2.0&lt;br /&gt;08048410 t frame_dummy&lt;br /&gt;         U fwrite@@GLIBC_2.0&lt;br /&gt;08048462 T main&lt;br /&gt;080496dc d p.5841&lt;br /&gt;         U puts@@GLIBC_2.0&lt;br /&gt;080496e0 B stderr@@GLIBC_2.0&lt;br /&gt;         U strcpy@@GLIBC_2.0&lt;/div&gt;&lt;br /&gt;La commande nm permet d' obtenir la liste des symbols.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-8011333261631671292?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/8011333261631671292/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=8011333261631671292&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/8011333261631671292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/8011333261631671292'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/11/dtournement-du-flux-d-execution-d-un.html' title='Détournement du flux d&apos; execution d&apos; un programme'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-1561305445513137932</id><published>2008-11-22T10:00:00.006+01:00</published><updated>2008-11-22T10:12:39.805+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>Les sections .ctors / .dtors</title><content type='html'>Quand on lance par exemple la commande :&lt;br /&gt;&lt;div class="shell"&gt;$ size -A -x /bin/ls&lt;br /&gt;/bin/ls  :&lt;br /&gt;section             size        addr&lt;br /&gt;.interp             0x13   0x8048134&lt;br /&gt;.note.ABI-tag       0x20   0x8048148&lt;br /&gt;.hash              0x32c   0x8048168 &amp;lt;-- table de hash&lt;br /&gt;.gnu.hash           0x5c   0x8048494 &amp;lt;-- table de hash&lt;br /&gt;.dynsym            0x680   0x80484f0 &amp;lt;-- table des symboles&lt;br /&gt;.dynstr            0x477   0x8048b70 &amp;lt;-- table des noms&lt;br /&gt;.gnu.version        0xd0   0x8048fe8&lt;br /&gt;.gnu.version_r      0xc0   0x80490b8 &lt;br /&gt;.rel.dyn            0x28   0x8049178 &amp;lt;-- table de relocation&lt;br /&gt;.rel.plt           0x2e0   0x80491a0 &amp;lt;-- table de relocation&lt;br /&gt;.init               0x30   0x8049480&lt;br /&gt;.plt               0x5d0   0x80494b0&lt;br /&gt;.text            0x104bc   0x8049a80 &amp;lt;-- intruction du programme (r)&lt;br /&gt;.fini               0x1c   0x8059f3c&lt;br /&gt;.rodata           0x3e4c   0x8059f60 &amp;lt;-- variables globales et statiques constante (r)&lt;br /&gt;.eh_frame_hdr       0x2c   0x805ddac&lt;br /&gt;.eh_frame           0xcc   0x805ddd8&lt;br /&gt;.ctors               0x8   0x805e000 &amp;lt;-- constructeur&lt;br /&gt;.dtors               0x8   0x805e008 &amp;lt;-- destructeur&lt;br /&gt;.jcr                 0x4   0x805e010&lt;br /&gt;.dynamic            0xe8   0x805e014&lt;br /&gt;.got                 0x8   0x805e0fc&lt;br /&gt;.got.plt           0x17c   0x805e104&lt;br /&gt;.data              0x110   0x805e280 &amp;lt;-- variables globales et statiques initialisés (r+w)&lt;br /&gt;.bss               0x46c   0x805e3a0 &amp;lt;-- variables globales et statiques non initialis&amp;eacute;s (r+w)&lt;br /&gt;.gnu_debuglink       0x8         0x0&lt;br /&gt;Total            0x1656a&lt;/div&gt;&lt;br /&gt;Bon il y a les sections connue , .text, .data, .rodata etc ... mais pour ceu qui ne ce sont jamais demander ce que sont les sections .ctors et .dtors voici une petite explication .&lt;br /&gt;En C un peu comme dans une class en PHP il y a un constructeur (.ctors) et un destructeur (.dtors).&lt;br /&gt;Donc le constructeur et est appeler automatiquement au début du programme et le destructeur automatiquement à la fin . Voila un bout de code qui présente le fonctionnement :&lt;br /&gt;&lt;div class="shell"&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;&lt;br /&gt;static void constructeur(void)__attribute__((constructor));&lt;br /&gt;static void destructeur(void)__attribute__((destructor));&lt;br /&gt;&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Dans la fonction main()\n");&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return EXIT_SUCCESS;&lt;br /&gt;}&lt;br /&gt;void destructeur(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Dans le destructeur\n");&lt;br /&gt;}&lt;br /&gt;void constructeur(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Dans le constructeur\n");&lt;br /&gt;}&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-1561305445513137932?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/1561305445513137932/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=1561305445513137932&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/1561305445513137932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/1561305445513137932'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/11/les-sections-ctors-dtors.html' title='Les sections .ctors / .dtors'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-8739492508181285649</id><published>2008-11-21T22:18:00.002+01:00</published><updated>2008-11-21T22:18:53.680+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='divers'/><title type='text'>La génèse</title><content type='html'>Au commencement Dieu créa le digit. Il prit ensuite huit digits pour créer un octet.&lt;br /&gt;Or, la mémoire était vide ; seuls les crayons et les gommes couvraient la surface du bureau.&lt;br /&gt;Dieu sépara alors le zéro et le un, et il vit que cela était bon.&lt;br /&gt;Dieu dit : "Que les données soient !" Et il en fut ainsi.&lt;br /&gt;&lt;br /&gt;Et Dieu dit : "Plaçons les données dans leurs lieux respectifs."&lt;br /&gt;Et il créa les disquettes, les disques durs et les CD-ROM.&lt;br /&gt;Mais le logiciel n'existait pas encore.&lt;br /&gt;Alors Dieu créa les programmes ; grands et petits.&lt;br /&gt;Dieu leur dit : "Allez et multipliez-vous, remplissez toute la mémoire."&lt;br /&gt;&lt;br /&gt;Dieu dit alors : "Je créerai le programmeur. Et le programmeur créera de nouveaux programmes et gouvernera les ordinateurs, les programmes et les données."&lt;br /&gt;Dieu créa le programmeur, et il le mit dans le centre de données.&lt;br /&gt;&lt;br /&gt;Et Dieu montra au programmeur le répertoire et lui dit :&lt;br /&gt;"Tu peux utiliser tous les volumes et sous-répertoires, mais n'utilise pas Windows."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Alors Dieu dit : "Il n'est pas bon que le programmeur soit seul."&lt;br /&gt;Il prit un OS du corps du programmeur et il créa une créature qui regardait le programmeur, qui admirait le programmeur, qui aimait les choses faites par le programmeur. Dieu nomma la créature "Utilisateur".&lt;br /&gt;Il laissa le programmeur et l'Utilisateur nus dans le DOS, et il vit que cela était bon.&lt;br /&gt;&lt;br /&gt;Mais Bill était plus malin que toutes les créatures de Dieu.&lt;br /&gt;Bill dit à l'utilisateur : "Dieu t'a-t-il vraiment dit de ne pas utiliser tous les programmes ?"&lt;br /&gt;&lt;br /&gt;L'utilisateur répondit : "Dieu a dit que nous pouvions utiliser n'importe quel programme et n'importe quel bloc de données, mais il nous a dit de ne pas utiliser Windows parce que nous pourrions mourir."&lt;br /&gt;&lt;br /&gt;Et Bill dit à l'utilisateur : "Comment peux-tu parler de quelque chose que tu n'as même pas essayé ? Dès que tu utiliseras Windows tu seras l'égal de Dieu. Tu seras capable de créer tout ce que tu voudras, rien qu'en touchant la souris."&lt;br /&gt;&lt;br /&gt;Et l'utilisateur vit que les fruits de Windows étaient meilleurs et plus faciles à utiliser.&lt;br /&gt;Il vit aussi que toute connaissance était inutile, puisque Windows pouvait la remplacer.&lt;br /&gt;&lt;br /&gt;Alors l'utilisateur installa Windows dans son ordinateur ; et il dit au programmeur que cela était bon.&lt;br /&gt;&lt;br /&gt;Le programmeur commença à chercher de nouveaux pilotes.&lt;br /&gt;&lt;br /&gt;Alors Dieu lui dit : "Que cherches-tu ?"&lt;br /&gt;Le programmeur répondit : "Je cherche de nouveaux pilotes, parce que je ne peux pas les trouver dans le DOS."&lt;br /&gt;&lt;br /&gt;Dieu lui répondit : "Qui t'a dit que tu avais besoin de nouveaux pilotes, n'aurais-tu pas utilisé Windows par exemple ?"&lt;br /&gt;&lt;br /&gt;Le programmeur lui répondit : "C'est Bill qui nous l'a dit."&lt;br /&gt;&lt;br /&gt;Alors Dieu dit à Bill :&lt;br /&gt;"Pour ce que tu as fait, tu seras haï par toutes les créatures et l'utilisateur sera toujours mécontent de toi. Pire encore, tu seras condamné à ne jamais vendre que Windows."&lt;br /&gt;&lt;br /&gt;Dieu dit encore à l'utilisateur :&lt;br /&gt;"Pour ce que tu as fait, Windows te trompera et consommera toutes tes ressources et tu ne pourras acheter que de mauvais programmes que tu utiliseras dans la douleur et tu seras toujours sous la tutelle du programmeur."&lt;br /&gt;&lt;br /&gt;Dieu dit enfin au programmeur :&lt;br /&gt;"Pour n'avoir pas écouté l'utilisateur, tu ne seras jamais heureux. Tous tes programmes seront farcis d'erreurs, tu crouleras sous les fiches de bugs et tu seras condamné à les corriger et à les recorriger jusqu'à la fin des temps."&lt;br /&gt;&lt;br /&gt;Dieu les expulsa tous du centre de données et il en bloqua la porte avec un mot de passe.&lt;br /&gt;&lt;br /&gt;Puis Dieu se ravisa et se dit qu'il n'était pas juste que tous soient punis par la faute d'un seul.&lt;br /&gt;&lt;br /&gt;Alors il créa la pomme pour narguer Bill, et le pingouin pour libérer les hommes.&lt;br /&gt;&lt;br /&gt;PS :&lt;br /&gt;La pomme est le logo d’Apple Computer Inc.&lt;br /&gt;Le pingouin est le logo de Linux (logiciel libre)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-8739492508181285649?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/8739492508181285649/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=8739492508181285649&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/8739492508181285649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/8739492508181285649'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/11/la-gnse.html' title='La génèse'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-2801077735785386270</id><published>2008-11-15T14:22:00.006+01:00</published><updated>2008-11-22T09:52:14.782+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>Les arguments de ligne de commande</title><content type='html'>Je me sert très souvent des arguments de la ligne de commande pour ne pas dire toujour ...&lt;br /&gt;Regardons le bout de code ci dessous:&lt;br /&gt;&lt;div class="shell"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;      printf("adresse de argc: %p\n"&lt;br /&gt;      "valeur de argc: %d\n"&lt;br /&gt;      "[ valeur gauche de argv: %p | "&lt;br /&gt;      "valeur droite de argv : %p ]\n", &amp;argc, argc, &amp;argv, argv);&lt;br /&gt;&lt;br /&gt;      return EXIT_SUCCESS;&lt;br /&gt;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;Ou argc est égal au nombre d' arguments de la ligne de commande -1 car argv[0] contient le nom du programme donc argc vaut toujour 1, et argv est pointeur sur un tableau de pointeur qui pointe sur l' adresse en mémoire du premier caractère de chaque argument.&lt;br /&gt;Le shema ci-dessous résume la situtation très simplement:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LvMB9hPSuWI/SR7OHtHFGOI/AAAAAAAAAIc/TsUAeEqQ9Kk/s1600-h/argv.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://4.bp.blogspot.com/_LvMB9hPSuWI/SR7OHtHFGOI/AAAAAAAAAIc/TsUAeEqQ9Kk/s320/argv.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5268875245833754850" /&gt;&lt;/a&gt;&lt;br /&gt;Si je lance le programme au dessus en le compilant avec l' option -g pour pouvoir ensuite le debugger j' obtient ceci :&lt;br /&gt;&lt;div class="shell"&gt;$ ./a.out arg1 arg2&lt;br /&gt;adresse de argc: 0xbfcd42e0&lt;br /&gt;valeur de argc: 3&lt;br /&gt;[ valeur gauche de argv: 0xbfcd42e4 | valeur droite de argv : 0xbfcd4364 ]&lt;/div&gt;&lt;br /&gt;Ici il y a plusieur chose interressante:&lt;br /&gt;1) on remarque que argc et argv ce suivent en mémoire, argc est un entier codé sur 4 octects et argv est un pointeur qui lui aussi est codé sur 4 octets.&lt;br /&gt;Donc 0xbfcd42e4 - 0xbfcd42e0 = 0x4.&lt;br /&gt;0xbfcd42e4 n' est pas l' adresse du premier argument mais bien l' adresse du pointeur qui pointe sur l' adresse 0xbfcd4364 qui est l' adresse du tableau de pointeur.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic; font-size: 10pt;"&gt;Attention: Les adresses qu' on voit ici ne sont pas les adresses exact comme elle sont dans la mémoire physique de la machine, ce sont des adresses virtuelles, un mécanisme de translation de ces adresses virtuelles en adresse physique est mis en place par le système et d' autre par, par ce que l' on apel la MMU (Memory Management Unit) j' èspère pouvoir faire un article la dessus.&lt;br /&gt;Sans rentrer dans les détails quand un programme tourne il dispose d' un espace d' adressage a lui tout seul, avec son code, ses données, et plein d' autre informations, en théorie il est donc impossible qu' un autre programme puisse écrire quoi que ce soit dans l' espace d' adressage d' un autre.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Revenons en à nos moutons et allons chercher dans cette espace d' adressage les données ou elles ce trouvent avec gdb :&lt;br /&gt;&lt;div class="shell"&gt;$ gdb -q ./a.out &lt;br /&gt;1 . (gdb) b main&lt;br /&gt;2 . Breakpoint 1 at 0x8048385: file test.c, line 7.&lt;br /&gt;3 . (gdb) r arg1 arg2&lt;br /&gt;4 . Starting program: /home/napoleon/a.out arg1 arg2&lt;br /&gt;5 . &lt;br /&gt;6 . Breakpoint 1, main (argc=3, argv=0xbfd9abe4) at test.c:7&lt;br /&gt;7 . 7           printf("adresse de argc: %p\n"&lt;br /&gt;8 . (gdb) p &amp;argc&lt;br /&gt;9 . $1 = (int *) 0xbfd9ab60&lt;br /&gt;10 . (gdb) p &amp;argv&lt;br /&gt;11 . $2 = (char ***) 0xbfd9ab64&lt;br /&gt;12 . (gdb) p argv&lt;br /&gt;13 . $3 = (char **) 0xbfd9abe4&lt;br /&gt;14 . (gdb) x/4wx $3&lt;br /&gt;15 . 0xbfd9abe4: 0xbfd9c790 0xbfd9c7a5 0xbfd9c7aa 0x00000000&lt;br /&gt;16 . (gdb) x/s 0xbfd9c790&lt;br /&gt;17 . 0xbfd9c790:  "/home/napoleon/a.out"&lt;br /&gt;18 . (gdb) x/s 0xbfd9c7a5&lt;br /&gt;19 . 0xbfd9c7a5:  "arg1"&lt;br /&gt;20 . (gdb) x/s 0xbfd9c7aa&lt;br /&gt;21 . 0xbfd9c7aa:  "arg2"&lt;/div&gt; &lt;br /&gt;On voit que les adresses on changer ce qui est normal, mais le principe est le même.&lt;br /&gt;&lt;br /&gt;A la ligne 8 j' affiche l' adresse de argc, puis a la ligne 10 j' affiche l' adresse du pointeur argv, encore une fois on voit bien qu' il ce suivent.&lt;br /&gt;a la ligne 12 j' affiche l' adresse pointé par argv avec la commande 'p' qui est le raccourci de 'print' ce qui a pour effet de placer le résultat de la commande dans la variable $3 (ligne 13).&lt;br /&gt;Juste après a la ligne 14 j' affiche un morceau de la mémoire avec la commande 'x'. ici je fait suivre x/ par 4wx ce qui veut dire affiche moi 4 mots mémoire en hexadécimal de l' adresse contenu dans la variable $3.&lt;br /&gt;Et la a la ligne 15 j' obtient l' adresse du premier octet de chacun de mes 3 arguments + le NULL qui doit obligatoirement terminer le tableau, la aussi on remarque facilement que les trois arguments ce suivent, les lignes suivante j' ai plus qu' a afficher la chaine contenu a partir de chaque adresse, avec la commande x/s ou le 's' veut dire string.&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;      int i = 1;&lt;br /&gt;      while(i &amp;lt; argc)&lt;br /&gt;      {&lt;br /&gt;            printf("argv[%d] = [ %s ] a l' adresse %p\n", i, argv[i], argv[i]);&lt;br /&gt;            i++;&lt;br /&gt;      }&lt;br /&gt;      return EXIT_SUCCESS;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$ ./a.out arg1 arg2 arg3 &lt;br /&gt;argv[1] = [ arg1 ]  a l' adresse 0xbfb7e76b&lt;br /&gt;argv[2] = [ arg2 ]  a l' adresse 0xbfb7e770&lt;br /&gt;argv[3] = [ arg3 ]  a l' adresse 0xbfb7e775&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;En réalité on ne va pas analyser les options de la ligne de commande de cette façon qui est lourde et chiante a codé (imaginer le nombre de comparaison a faire etc ...) , pour cela il y a la fonction getopt() défini dans /usr/include/unistd.h et getopt.h pour les options long.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-2801077735785386270?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/2801077735785386270/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=2801077735785386270&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2801077735785386270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2801077735785386270'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/11/les-arguments-de-ligne-de-commande.html' title='Les arguments de ligne de commande'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LvMB9hPSuWI/SR7OHtHFGOI/AAAAAAAAAIc/TsUAeEqQ9Kk/s72-c/argv.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-7247133810307237718</id><published>2008-11-07T12:24:00.005+01:00</published><updated>2008-11-07T12:28:03.715+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='divers'/><title type='text'>Sans commentaire</title><content type='html'>Défois on tombe la dessus ...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LvMB9hPSuWI/SRQmJX67RII/AAAAAAAAAIU/2kArdAs4_ro/s1600-h/C2587914.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://3.bp.blogspot.com/_LvMB9hPSuWI/SRQmJX67RII/AAAAAAAAAIU/2kArdAs4_ro/s320/C2587914.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5265875806784799874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LvMB9hPSuWI/SRQmEPoZvZI/AAAAAAAAAIM/UQRHz2KnyPM/s1600-h/C3778072.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_LvMB9hPSuWI/SRQmEPoZvZI/AAAAAAAAAIM/UQRHz2KnyPM/s320/C3778072.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5265875718660275602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LvMB9hPSuWI/SRQl-BF9NSI/AAAAAAAAAIE/o8a4tsNS_-I/s1600-h/C5145496.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_LvMB9hPSuWI/SRQl-BF9NSI/AAAAAAAAAIE/o8a4tsNS_-I/s320/C5145496.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5265875611678487842" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-7247133810307237718?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/7247133810307237718/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=7247133810307237718&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/7247133810307237718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/7247133810307237718'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/11/sans-commentaire.html' title='Sans commentaire'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_LvMB9hPSuWI/SRQmJX67RII/AAAAAAAAAIU/2kArdAs4_ro/s72-c/C2587914.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-3651227782119169697</id><published>2008-11-01T08:50:00.003+01:00</published><updated>2008-11-01T08:56:39.400+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>installer VLC 0.9.3 sur ubuntu hardy 8.04</title><content type='html'>Pour ceux qui n' on pas voulu passer à intrepid voici la solution pour avoir un jolie vlc:&lt;br /&gt;Avant tout supprimer la version déja installer sur votre machine.&lt;br /&gt;Dans votre sources.lst rajouter cette ligne:&lt;br /&gt;&lt;div class="shell"&gt;deb http://ppa.launchpad.net/c-korn/ubuntu hardy main&lt;/div&gt;&lt;br /&gt;Puis on recharge:&lt;br /&gt;&lt;div class="shell"&gt;sudo apt-get update&lt;/div&gt;&lt;br /&gt;et  on installe:&lt;br /&gt;&lt;div class="shell"&gt;sudo apt-get install vlc&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-3651227782119169697?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/3651227782119169697/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=3651227782119169697&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/3651227782119169697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/3651227782119169697'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/11/installer-vlc-093-sur-hardy.html' title='installer VLC 0.9.3 sur ubuntu hardy 8.04'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-1914214024818673955</id><published>2008-10-24T17:44:00.006+02:00</published><updated>2008-10-24T18:02:53.850+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Deux petit programmes utiles</title><content type='html'>Hello,&lt;br /&gt;Bon voila deux petit programmes pour encore une fois simplifié la vie du programmeur.&lt;br /&gt;le premier est ascii mais un screenshot vaut meiux que mille mots :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LvMB9hPSuWI/SQHt6BZwN2I/AAAAAAAAAH0/leykS0Kw5Eo/s1600-h/Capture-napoleon%40r4d4r:+%7E.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 189px;" src="http://4.bp.blogspot.com/_LvMB9hPSuWI/SQHt6BZwN2I/AAAAAAAAAH0/leykS0Kw5Eo/s320/Capture-napoleon%40r4d4r:+%7E.png" alt="" id="BLOGGER_PHOTO_ID_5260747420810098530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;C' est tout simplement la table ascii mais avec des options comme -x pour hexadecimal -o octale -d decimal c' est très pratique.&lt;br /&gt;Et un deuxieme qui ma vraiment supris c' est meld, enfaite meld compare des fichiers ou des répertoires, la aussi un screenshot sera plus parlant :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LvMB9hPSuWI/SQHwCRhxpMI/AAAAAAAAAH8/g63M4gyJ3iY/s1600-h/Capture-main.c+:+main2.c+-+Meld.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 290px;" src="http://2.bp.blogspot.com/_LvMB9hPSuWI/SQHwCRhxpMI/AAAAAAAAAH8/g63M4gyJ3iY/s320/Capture-main.c+:+main2.c+-+Meld.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260749761600922818" /&gt;&lt;/a&gt;&lt;br /&gt;J' ai deux fichiers avec quelque différences et meld les trouvent et les indiques. C' est vraiment un exemple basique ...&lt;br /&gt;Les deux sont dans les dépots pour les installer:&lt;br /&gt;&lt;div class="shell"&gt;sudo apt-get install meld ascii&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-1914214024818673955?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/1914214024818673955/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=1914214024818673955&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/1914214024818673955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/1914214024818673955'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/10/deux-petit-programmes-utiles.html' title='Deux petit programmes utiles'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LvMB9hPSuWI/SQHt6BZwN2I/AAAAAAAAAH0/leykS0Kw5Eo/s72-c/Capture-napoleon%40r4d4r:+%7E.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-5193919265764615188</id><published>2008-10-23T09:37:00.004+02:00</published><updated>2008-10-23T09:48:24.654+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>chiffrer et dechiffrer facilement avec ccrypt</title><content type='html'>Défois on a pas envie de ce prendre la courgette avec GPG ou ce genre de logiciel, admettons que j' ai un fichier que je veux chiffrer alors la solution s' apel ccrypt.&lt;br /&gt;Pour l' installer:&lt;br /&gt;&lt;div class="shell"&gt;sudo apt-get install ccrypt&lt;/div&gt;&lt;br /&gt;voila maintenant il y a deux commande à retenir.&lt;br /&gt;pour chiffrer le fichier:&lt;br /&gt;&lt;div class="shell"&gt;ccrypt -e votreFichier&lt;/div&gt;&lt;br /&gt;un mot de passe va vous être demander.&lt;br /&gt;et voila votre fichier est chiffrer on le reconnais car il portera l' extension .cpt&lt;br /&gt;maintenant pour le déchiffrer:&lt;br /&gt;&lt;div class="shell"&gt;ccrypt -d votreFichier.cpt&lt;/div&gt;&lt;br /&gt;on vous demande votre mot de passe et hop ! le fichier est déchiffrer !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-5193919265764615188?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/5193919265764615188/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=5193919265764615188&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/5193919265764615188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/5193919265764615188'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/10/chiffrer-et-dechiffrer-facilement-avec.html' title='chiffrer et dechiffrer facilement avec ccrypt'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-2904945681043918630</id><published>2008-10-19T12:42:00.006+02:00</published><updated>2008-10-22T15:30:12.324+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>La synthaxe intel dans GDB gnu debugger</title><content type='html'>Enfaite je ne m' etais jamais interresser au option de configuration de GDB, donc en cherchant un peu j' ai trouver comment obtenir des output en synthaxe INTEL.&lt;br /&gt;&lt;br /&gt;pour simplement placer l' output assembleur (intel) dans un fichier on peut faire comme ça:&lt;br /&gt;&lt;div class="shell"&gt;~$ gcc -S -masm=intel essai.c&lt;br /&gt;&lt;br /&gt;napol3on@s4t4n:~$ cat essai.s&lt;br /&gt;.file "essai.c"&lt;br /&gt;.intel_syntax noprefix&lt;br /&gt;.section .rodata&lt;br /&gt;.LC0:&lt;br /&gt;.string "hello world"&lt;br /&gt;.text&lt;br /&gt;.globl main&lt;br /&gt;.type main, @function&lt;br /&gt;main:&lt;br /&gt;lea ecx, [esp+4]&lt;br /&gt;and esp, -16&lt;br /&gt;push DWORD PTR [ecx-4]&lt;br /&gt;push ebp&lt;br /&gt;mov ebp, esp&lt;br /&gt;push ecx&lt;br /&gt;sub esp, 4&lt;br /&gt;mov DWORD PTR [esp], OFFSET FLAT:.LC0&lt;br /&gt;call printf&lt;br /&gt;mov eax, 0&lt;br /&gt;add esp, 4&lt;br /&gt;pop ecx&lt;br /&gt;pop ebp&lt;br /&gt;lea esp, [ecx-4]&lt;br /&gt;ret&lt;br /&gt;.size main, .-main&lt;br /&gt;.ident "GCC: (Ubuntu 4.3.2-1ubuntu10) 4.3.2"&lt;br /&gt;.section .note.GNU-stack,"",@progbits&lt;/div&gt;&lt;br /&gt;Mais le mieux est que cette option soit constante.&lt;br /&gt;Donc pour configurer GDB il faut créer un fichier .gdbinit dans le /home et c' est ici que l' on place les commandes qu' il va lire au démarrage.&lt;br /&gt;donc la commande a placer dans ce fichier est :&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;set disassembly-flavor intel&lt;/span&gt;&lt;br /&gt;Vous pouvez en apprendre plus ici :&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/aix/library/au-gdb.html"&gt;http://www.ibm.com/developerworks/aix/library/au-gdb.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Edit: puisque l' on est dans la synthaxe intel il serais bien de mettre objdump aussi avec cette synthaxe donc pour avoir une output en synthaxe intel sur objdump il faut rajouter: &lt;br /&gt;&lt;div class="shell"&gt;objdump -M intel ./executable&lt;/div&gt;&lt;br /&gt;sur la ligne de commande.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-2904945681043918630?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/2904945681043918630/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=2904945681043918630&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2904945681043918630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2904945681043918630'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/10/la-synthaxe-intel-dans-gdb-gnu-debugger.html' title='La synthaxe intel dans GDB gnu debugger'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-4849136893807752710</id><published>2008-10-18T21:46:00.015+02:00</published><updated>2008-10-22T18:04:38.071+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Migration vers ubuntu 8.10 Intrepid</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;Et oui je cette apres midi je me suis lancer dans mise a jour vers ubuntu 8.10 Intrepid, apres quelque renseignement sur les bog connus je n' ai rien trouver de vraiment chiant, seul probleme dès le debut de la mise a jour, il m' informe que le pilote nvidia n' est plus disponible pour ma carte graphique (gforce4 un peu de retard je sais mais bon c' est deja un point faible ..) apres quelque recherche il ce trouve que deux des pilotes nvidia ne seront plus dispo, et un de chez ati. (a suivre)&lt;br /&gt;&lt;br /&gt;Sinon quelque petit changement à noter comme:&lt;br /&gt;le passage a the gimp 2.6 &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpBm6t7CYI/AAAAAAAAAHM/ON_w0LNMye4/s1600-h/Capture-Lancement+de+GIMP.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpBm6t7CYI/AAAAAAAAAHM/ON_w0LNMye4/s320/Capture-Lancement+de+GIMP.png" alt="" id="BLOGGER_PHOTO_ID_5258587651761179010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_LvMB9hPSuWI/SPpCO4KZZ0I/AAAAAAAAAHU/B1bbA9Mi4Zs/s1600-h/Capture.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_LvMB9hPSuWI/SPpCO4KZZ0I/AAAAAAAAAHU/B1bbA9Mi4Zs/s320/Capture.png" alt="" id="BLOGGER_PHOTO_ID_5258588338270070594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;navigation avec onglets dans nautilus. (screenshot ci-dessous)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpAoRep1TI/AAAAAAAAAHE/vscR2hWzmJM/s1600-h/Capture-proc%C2%A0-%C2%A0Navigateur+de+fichiers.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpAoRep1TI/AAAAAAAAAHE/vscR2hWzmJM/s320/Capture-proc%C2%A0-%C2%A0Navigateur+de+fichiers.png" alt="" id="BLOGGER_PHOTO_ID_5258586575539393842" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;Et enfin la possibilité de faire un OS bootable a partir d' une clé USB (screenshot ci-dessous)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LvMB9hPSuWI/SPo_ZV1sblI/AAAAAAAAAG8/Qg4FDjvtuVc/s1600-h/Capture-Make+USB+Startup+Disk.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_LvMB9hPSuWI/SPo_ZV1sblI/AAAAAAAAAG8/Qg4FDjvtuVc/s320/Capture-Make+USB+Startup+Disk.png" alt="" id="BLOGGER_PHOTO_ID_5258585219500109394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;le nouveau VLC directement inclus ( ouf depuis le temp )&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpDIqCUZJI/AAAAAAAAAHc/SoW0J1pSF8g/s1600-h/Capture-Lecteur+multim%C3%A9dia+VLC.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpDIqCUZJI/AAAAAAAAAHc/SoW0J1pSF8g/s320/Capture-Lecteur+multim%C3%A9dia+VLC.png" alt="" id="BLOGGER_PHOTO_ID_5258589330910504082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Et un petit truc que je viens de remarquer c' est system cleaner (faire le menage quoi)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpD5Bs-lMI/AAAAAAAAAHk/JKfQQMzhC8U/s1600-h/Capture-System+Cleaner.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpD5Bs-lMI/AAAAAAAAAHk/JKfQQMzhC8U/s320/Capture-System+Cleaner.png" alt="" id="BLOGGER_PHOTO_ID_5258590161897166018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Quelque theme en plus.&lt;br /&gt;&lt;br /&gt;Edit: j' avais appris que l' on disposais d' un repertoire crypter et invisible au yeux des autres $USER donc j' ai trouver comment l' activer.&lt;br /&gt;&lt;br /&gt;il faut installer ce paquet:&lt;br /&gt;&lt;div class="shell"&gt;ecryptfs-utils&lt;/div&gt;&lt;br /&gt;et pour l' activer taper:&lt;br /&gt;&lt;div class="shell"&gt;ecryptfs-setup-private&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Voila voila ! dès que j' aurais fais le tour je completerais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-4849136893807752710?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/4849136893807752710/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=4849136893807752710&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/4849136893807752710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/4849136893807752710'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/10/migration-vers-ubuntu-810-intrepid.html' title='Migration vers ubuntu 8.10 Intrepid'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_LvMB9hPSuWI/SPpBm6t7CYI/AAAAAAAAAHM/ON_w0LNMye4/s72-c/Capture-Lancement+de+GIMP.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-6841338658674550327</id><published>2008-09-25T05:13:00.004+02:00</published><updated>2008-09-25T05:30:03.420+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installer code::blocks en 2 minutes sur ubuntu</title><content type='html'>Me revoila ! oula j' arrête pas en ce moment ... bon je vais vous présenter la façon la plus simple d' installer code::blocks sur votre ubuntu, simple mais elle ne ce mettra pas a jour automatiquement mais pour y remèdier j' écrirais un petit script bash de mise a jour que je posterais plus tard.&lt;br /&gt;&lt;br /&gt;Donc on commence par télécharger les paquets :&lt;br /&gt;Pour linux-32bit:&lt;br /&gt;&lt;a href="http://download.berlios.de/codeblocks/codeblocks_8.02-0ubuntu1.deb.tar.gz"&gt;http://download.berlios.de/codeblocks/codeblocks_8.02-0ubuntu1.deb.tar.gz&lt;/a&gt; &lt;br /&gt;Pour linux-64bit:&lt;br /&gt;&lt;a href="http://prdownload.berlios.de/codeblocks/codeblocks-8.02-amd64.tar.gz"&gt;http://prdownload.berlios.de/codeblocks/codeblocks-8.02-amd64.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;placer le tar.gz dans votre home par exemple, puis on ouvre une console et on décompresse :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;tar xvfz code-blocks-xxxxxx.tar.gz&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;après vous allez vous retrouvez avec plusieurs paquets .deb &lt;br /&gt;&lt;br /&gt;pour tout installer facilement on tape :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;dpkg -i *.deb&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;et voila vous avez installer code::blocks en moins de 2 minutes !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-6841338658674550327?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/6841338658674550327/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=6841338658674550327&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/6841338658674550327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/6841338658674550327'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/09/installer-codeblocks-en-2-minutes-sur.html' title='Installer code::blocks en 2 minutes sur ubuntu'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-2764835204549960906</id><published>2008-09-23T16:23:00.006+02:00</published><updated>2008-09-23T16:48:20.172+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>structure utsname,obtenir des informations sur votre machine.</title><content type='html'>Hello,&lt;br /&gt;je voulais mettre ce bout de code, car souvent sur les forums la question est poser, donc voila le code:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/utsname.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    struct utsname info;&lt;br /&gt;&lt;br /&gt;    if(uname(&amp;info) == -1)&lt;br /&gt;    {&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;perror("uname ");&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(EXIT_FAILURE);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%s\n", info.nodename);&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%s\n", info.sysname);&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%s\n", info.machine);&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%s\n", info.release);&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%s\n", info.version);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return EXIT_SUCCESS;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;équivalent a un [ uname --all ].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-2764835204549960906?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/2764835204549960906/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=2764835204549960906&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2764835204549960906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2764835204549960906'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/09/structure-utsname-ou-comment-obtenir.html' title='structure utsname,obtenir des informations sur votre machine.'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-8521177989631502441</id><published>2008-09-23T16:10:00.002+02:00</published><updated>2008-09-23T16:13:22.182+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Les news'/><title type='text'>Sortie de la version VLC 0.9.2</title><content type='html'>Le très célèbre lecteur multimédia VLC est maintenant disponible en version 0.9.2,&lt;br /&gt;au menu des nouvelles fonctionnalités :&lt;br /&gt;- Une nouvelle interface sous Linux et Windows&lt;br /&gt;- Amélioration de la gestion de la playlist et des librairies multimédias&lt;br /&gt;- La prise en charge de nouveaux codecs et de filtres vidéo et audio.&lt;br /&gt;&lt;br /&gt;Site officiel : &lt;a href="http://www.videolan.org/vlc/"&gt;http://www.videolan.org/vlc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Voici une présentation vidéo de VLC 0.9.2, ou l'on peut voir la nouvelle interface de VLC sous Windows Vista et sous Linux (GNOME et KDE 4) : &lt;a href="http://www.youtube.com/watch?v=zVhk7Kq1rEU"&gt;http://www.youtube.com/watch?v=zVhk7Kq1rEU&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pour plus d'informations sur cette nouvelle version majeur de vlc : &lt;a href="http://wiki.videolan.org/What_is_cool_in_0.9"&gt;http://wiki.videolan.org/What_is_cool_in_0.9&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-8521177989631502441?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/8521177989631502441/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=8521177989631502441&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/8521177989631502441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/8521177989631502441'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/09/sortie-de-la-version-vlc-092.html' title='Sortie de la version VLC 0.9.2'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-4579296218974507722</id><published>2008-09-20T18:00:00.000+02:00</published><updated>2008-09-20T18:01:31.974+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Les news'/><title type='text'>CodeWeavers propose Google Chrome pour Mac et Linux</title><content type='html'>Quinze jours après la sortie pour les seuls PC sous Windows (XP et Vista) du navigateur web open-source de Google, Chrome, l'éditeur CodeWeavers se propose de le rendre officieusement disponible sur deux autres plateformes : Mac et Linux. A terme, c'est Google qui va en faire de même, prévoyant effectivement de proposer Chrome en version Mac et Linux en plus de Windows.&lt;br /&gt;&lt;br /&gt;Connu principalement pour son logiciel "CrossOver" permettant aux utilisateurs de Mac et Linux d'exécuter certains programmes sous Windows (dont Microsoft Office ou Internet Explorer), cet éditeur américain s'est donc attaqué au navigateur web de Google pour le rendre compatible avec de nouvelles plateformes.&lt;br /&gt;&lt;br /&gt;Mais plutôt que d'exploiter la dernière version de Chrome disponible, CodeWeavers a préféré utiliser une version légèrement différente basée sur le moteur d'affichage open-source du navigateur baptisé "Chromium" qui possède à cette heure un rendu légèrement différent de son équivalent pour PC, encore en version bêta. Il ne faudra donc pas s'attendre à des miracles avec cette version Mac et Linux officieuse de Chrome, dépourvue de quelques fonctionnalités dont la mise à jour automatique du programme.&lt;br /&gt;&lt;br /&gt;D'ailleurs Jeremy White, le patron de CodeWeavers, précise qu'il s'agit d'un défi technique montrant la viabilité de sa solution exploitant entre autres le logiciel Wine (Wine Is Not an Emulator) plutôt qu'une réelle solution permettant d'utiliser pleinement Chrome. Ceci explique sans doute pourquoi "CrossOver Chromium" est relativement lent et n'exploite pas encore le Flash. Le logiciel est téléchargeable gratuitement &lt;a href="http://www.codeweavers.com/services/ports/chromium/"&gt;à cette adresse&lt;/a&gt; et compatible avec Mac OS X 10.4 (ou ultérieur) et différentes distributions GNU/Linux dont Debian, Red Hat, Mandriva, Suse ou Ubuntu.&lt;br /&gt;&lt;br /&gt;Lancé le 2 septembre dernier, Google Chrome représente actuellement selon Net Applications moins de 1% du marché mondial des navigateurs web. Selon Nielsen cette fois, Chrome aurait été téléchargé aux Etats-Unis la première semaine suivant son lancement pas moins de 2 millions de fois. Pas de quoi rivaliser avec les 8 millions de téléchargements de Firefox 3 en seule journée (le jour de son lancement le 18 juin dernier) mais cela confirme l'engouement suscité autour de la première version bêta de Chrome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-4579296218974507722?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/4579296218974507722/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=4579296218974507722&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/4579296218974507722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/4579296218974507722'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/09/codeweavers-propose-google-chrome-pour.html' title='CodeWeavers propose Google Chrome pour Mac et Linux'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-7844926231287929358</id><published>2008-09-09T16:17:00.014+02:00</published><updated>2008-09-09T18:12:02.617+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>Les pointeurs en C</title><content type='html'>Les pointeurs !! c' est quelque chose qui fait fuire beaucoup de débutant en langage C et pourtant c' est simple comme bonjour... quand on a compris le principe.&lt;br /&gt;C' est ce que je vais essayer de faire avec des exemples pratique, donc pas de théorie ou très peu.&lt;br /&gt;Alors un pointeur est une variable qui peut contenir l' adresse d' une autre variable (du même type).&lt;br /&gt;&lt;br /&gt;en faisant *pointeur j' obtiens la valeur de l' adresse pointer par pointeur.&lt;br /&gt;en faisant &amp;amp;pointeur j' obtient l' adresse de pointeur.&lt;br /&gt;c' est comme pour une variable normal.&lt;br /&gt;&lt;br /&gt;Mais vérifions tout de suite ce que j' avance :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;char *p;&lt;br /&gt;printf("[ adresse de p: %p adresse pointer par p: %p ]\n", &amp;amp;p, p);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;L' execution de ce bout de code me donne :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;[ adresse de p: 0xbffb5d28 adresse pointer par p: 0xbffb5d48 ]&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La vous allez me dire mais le pointeur ne pointe sur rien du tout et pourtant il contient une adresse c' est normal ?&lt;br /&gt;Oui en effet, je n' ai pas initialiser le pointeur a NULL, donc il pointe n' importe ou en mémoire, donc voila l' importance d' initialiser ses pointeur a NULL.&lt;br /&gt;&lt;br /&gt;On recommence de la bonne façon cette fois :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;char *p = NULL;&lt;br /&gt;printf("[ adresse de p: %p adresse pointer par p: %p ]\n", &amp;amp;p, p);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;L' execution de ce bout de code me donne :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;[ adresse de p: 0xbffa9d28 adresse pointer par p: (nil) ]&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La ok il pointe nul part et est bien initialiser a NULL.&lt;br /&gt;&lt;br /&gt;Maintenant on sais initialiser comme il faut un pointeur mais on sais autre chose, on sais que si on veut que notre pointeur pointe sur l' adresse d' une variable on va devoir remplacer (nil) qui est rien d autre qu une case pour stocker une adresse, par l' adresse de la variable sur laquelle on veut pointer non ?&lt;br /&gt;&lt;br /&gt;donc c' est simple :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;char caractere = 'B';&lt;br /&gt;char *p = NULL;&lt;br /&gt;&lt;br /&gt;printf("[ adresse de caractere : %p | contenu de caractere: %c ]\n\n", &amp;amp;caractere, caractere);&lt;br /&gt;&lt;br /&gt;printf("[ adresse de p : %p -&gt; adresse pointer par p: %p ]\n\n", &amp;amp;p, p);&lt;br /&gt;&lt;br /&gt;puts("Maintenant on remplace (nil) par l adresse de caractere\n");&lt;br /&gt;&lt;br /&gt;p = &amp;caractere;&lt;br /&gt;&lt;br /&gt;printf("[ adresse de p : %p -&gt; adresse pointer par p: %p ]\n", &amp;amp;p, p);&lt;br /&gt;&lt;br /&gt;printf("[ adresse de p: %p | contenu de l' adresse pointer par p: %c ]\n", &amp;amp;p, *p);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;L' execution donne:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;[ adresse de caractere : &lt;span style="color: rgb(255, 0, 0);"&gt;0xbfcd4253&lt;/span&gt; | contenu de caractere: B ]&lt;br /&gt;&lt;br /&gt;[ adresse de p : 0xbfcd424c -&gt; adresse pointer par p: (nil) ]&lt;br /&gt;&lt;br /&gt;Maintenant on remplace (nil) par l adresse de caractere&lt;br /&gt;&lt;br /&gt;[ adresse de p : 0xbfcd424c -&gt; adresse pointer par p: &lt;span style="color: rgb(255, 0, 0);"&gt;0xbfcd4253&lt;/span&gt; ]&lt;br /&gt;&lt;br /&gt;[ adresse de p: 0xbfcd424c | contenu de l' adresse pointer par p: B ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Vous voyez que les adresses en rouge sont les mêmes, donc on bien réussi a faire pointer q sur l adresse de caractere.J' aurais pu faire l impasse sur l adresse du pointeur (qui est toujour la meme elle ne change pas) mais c' est justement pour bien comprendre qu' un pointeur est exactement comme une variable sauf que a la place de contenir une valeur, elle contient l adresse d' une valeur.&lt;br /&gt;&lt;br /&gt;On va appronfondir cette histoire de signe afin de bien comprendre avec un exemple simple:&lt;br /&gt;&lt;br /&gt;rapel :&lt;br /&gt;en faisant *pointeur j' obtiens la valeur de l' adresse pointer par pointeur.&lt;br /&gt;en faisant &amp;amp;pointeur j' obtient l' adresse de pointeur.&lt;br /&gt;donc voici un bout de code tout a fait valide et qui va permettre de comprendre encore mieux cette histoire de signe.&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;char caractere = 'B';&lt;br /&gt;&lt;br /&gt;printf("caractere: %c\n", caractere);&lt;br /&gt;&lt;br /&gt;*(&amp;amp;caractere) = 'C';&lt;br /&gt;&lt;br /&gt;printf("caractere: %c\n", *(&amp;amp;caractere) );&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;et oui *(&amp;amp;caractere) est bien equivalent a caractere.&lt;br /&gt;&lt;br /&gt;met moi la lettre C dans le contenu *() de l' adresse de &amp;amp;caractere.&lt;br /&gt;&lt;br /&gt;Pour finir voila un bout de code que vous ne devriez plus avoir aucun mal a comprendre, j' ai mis des couleurs pour aider:&lt;br /&gt;&lt;div class="shell"&gt;char caractere = 'B';&lt;br /&gt;char *p = NULL;&lt;br /&gt;char **p_p = NULL;&lt;br /&gt;p = &amp;caractere;&lt;br /&gt;p_p = &amp;p;&lt;br /&gt;&lt;br /&gt;printf("[ adresse de caractere: %p | valeur: %c ]\n\n", &amp;amp;caractere, caractere);&lt;br /&gt;printf("[ adresse de p: %p | adresse pointer par p: %p ]\n\n", &amp;amp;p, p);&lt;br /&gt;printf("[ adresse de p_p: %p | adresse pointer par p_p: %p ]\n\n", &amp;amp;p_p, p_p);&lt;br /&gt;&lt;br /&gt;printf("valeur de caractere : %c\n", caractere);&lt;br /&gt;printf("valeur de p : %c\n", *p);&lt;br /&gt;printf("valeur de p_p : %c\n", **p_p);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;L' execution de ce code donne:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;[ adresse de caractere: &lt;span style="color: rgb(51, 204, 0);"&gt;0xbf94aed3&lt;/span&gt; | valeur: B ]&lt;br /&gt;&lt;br /&gt;[ adresse de p: &lt;span style="color: rgb(255, 0, 0);"&gt;0xbf94aecc&lt;/span&gt; | adresse pointer par p: &lt;span style="color: rgb(51, 204, 0);"&gt;0xbf94aed3&lt;/span&gt; ]&lt;br /&gt;&lt;br /&gt;[ adresse de p_p: 0xbf94aec8 | adresse pointer par p_p: &lt;span style="color: rgb(255, 0, 0);"&gt;0xbf94aecc&lt;/span&gt; ]&lt;br /&gt;&lt;br /&gt;valeur de caractere : B&lt;br /&gt;valeur de p : B&lt;br /&gt;valeur de p_p : B&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-7844926231287929358?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/7844926231287929358/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=7844926231287929358&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/7844926231287929358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/7844926231287929358'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/09/les-pointeurs-en-c.html' title='Les pointeurs en C'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-2252035379978775157</id><published>2008-09-02T15:33:00.005+02:00</published><updated>2008-09-04T14:00:35.369+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Plusieur consoles dans la meme fenêtre avec Terminator</title><content type='html'>Yop, ces derniers temp je me suis mis a tester un peu les petits logiciels pas trop connu sous ubuntu et j' ai découvert Terminator, Terminator est enfaite une simple console, mais qui offre quelque avantages par rapport celle de gnome par défaut. &lt;br /&gt;On peut par exemple diviser la fenêtre en plusieur, ou enlever les bordures, voila un petit screen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LvMB9hPSuWI/SL1Cd67PypI/AAAAAAAAAGs/Xm9W0CPFviI/s1600-h/Capture-Terminator.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_LvMB9hPSuWI/SL1Cd67PypI/AAAAAAAAAGs/Xm9W0CPFviI/s320/Capture-Terminator.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5241418623130520210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ou avec l' option -b enlever les bordures :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LvMB9hPSuWI/SL1DUhowHKI/AAAAAAAAAG0/QMKgNxIin_M/s1600-h/Capture-Terminator-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_LvMB9hPSuWI/SL1DUhowHKI/AAAAAAAAAG0/QMKgNxIin_M/s320/Capture-Terminator-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5241419561234865314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;voila pour le reste c est exactement pareil alors pourquoi s' en privé !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-2252035379978775157?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/2252035379978775157/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=2252035379978775157&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2252035379978775157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2252035379978775157'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/09/plusieur-consoles-dans-la-meme-fentre.html' title='Plusieur consoles dans la meme fenêtre avec Terminator'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LvMB9hPSuWI/SL1Cd67PypI/AAAAAAAAAGs/Xm9W0CPFviI/s72-c/Capture-Terminator.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-7593403505871013465</id><published>2008-08-15T21:20:00.009+02:00</published><updated>2008-10-23T09:49:33.593+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><title type='text'>john the ripper pour déchiffrer les MD5</title><content type='html'>Voila les commande pour installer john avec le patch sous linux:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;&amp;gt; mkdir john &lt;br /&gt;&amp;gt; cd john &lt;br /&gt;&amp;gt; wget http://www.openwall.com/john/f/john-1.7.2.tar.bz2 &lt;br /&gt;&amp;gt; bunzip2 john-1.7.2.tar.bz2 &amp;gt; tar -xvf john-1.7.2.tar&lt;br /&gt;&lt;br /&gt;&amp;gt; cd john-1.7.2 &lt;br /&gt;&amp;gt; wget ftp://ftp.openwall.com/pub/projects/john/contrib/john-1.7-rawmd5-ipb2-4.diff.gz&lt;br /&gt;&lt;br /&gt;&amp;gt; gzip -d john-1.7-rawmd5-ipb2-4.diff.gz &lt;br /&gt;&amp;gt; patch -p1 &amp;lt; john-1.7-rawmd5-ipb2-4.diff&lt;br /&gt;&lt;br /&gt;&amp;gt; cd src &lt;br /&gt;&amp;gt; make &lt;br /&gt;&amp;gt; make clean linux-x86-sse2&lt;br /&gt;&amp;gt; cd ../run/ &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A partir de la faite le test:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;./john -test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;et pour la lancer sur un hash:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;./john --format=raw-MD5 t_hash&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ou t_hash est le fichier avec le hash sous cette forme:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;toto&lt;/span&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;6f3e68a2a11cb9bf3ef40994a59e6b58&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ps: veillez a avoir bien installer patch avant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-7593403505871013465?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/7593403505871013465/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=7593403505871013465&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/7593403505871013465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/7593403505871013465'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/john-ripper-pour-tester-md5.html' title='john the ripper pour déchiffrer les MD5'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-3681641431858038646</id><published>2008-08-15T19:53:00.010+02:00</published><updated>2008-10-23T09:49:52.676+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><title type='text'>Morsegen fallait y penser</title><content type='html'>En scrutant les bas fond d' internet je viens de tomber sur un petit Tool assez original coder par luigi Auriemma, il prend simplement un fichier texte en argument et vous donne la conversion en morse vous savez le langage pour envoyer des SOS c' est très amusant.&lt;br /&gt;Par exemple je crée un fichier exemple.txt et j' écrit  "hello world"  à l' interieur:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;napoleon@s4t4n:~/Bureau/morsegen$ echo "hello world" &gt; exemple.txt&lt;/div&gt;&lt;br /&gt;je lance le petit tool:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;napoleon@s4t4n:~/Bureau/morsegen$ ./morsegen exemple.txt&lt;br /&gt;Morse generator 0.2&lt;br /&gt;by Luigi Auriemma&lt;br /&gt;e-mail: aluigi@autistici.org&lt;br /&gt;web:    aluigi.org&lt;br /&gt;&lt;br /&gt;.... . ._.. ._.. ___   .__ ___ ._. ._.. _..&lt;/div&gt;&lt;br /&gt;En cadeaux je vous met l' alphabet morse pour comparer :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LvMB9hPSuWI/SKXHFPrKoCI/AAAAAAAAAGk/wuagaOL0q5Y/s1600-h/250px-International_Morse_Code.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_LvMB9hPSuWI/SKXHFPrKoCI/AAAAAAAAAGk/wuagaOL0q5Y/s320/250px-International_Morse_Code.PNG" alt="" id="BLOGGER_PHOTO_ID_5234809034808926242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Vous le trouverez les sources&lt;span style="color: rgb(255, 102, 102);"&gt; &lt;/span&gt;&lt;a style="color: rgb(255, 102, 102);" href="http://aluigi.org/mytoolz.htm"&gt;ici&lt;/a&gt; a morsgen dans le zip ya le .exe pour window(pas essayer) et le morsegen.c a compiler.&lt;br /&gt;gcc -c morsegen.c&lt;br /&gt;gcc -o morsegen morsgen.o&lt;br /&gt;Merci monsieur luigi très amusant !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-3681641431858038646?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/3681641431858038646/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=3681641431858038646&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/3681641431858038646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/3681641431858038646'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/morsegen-fallait-y-penser.html' title='Morsegen fallait y penser'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LvMB9hPSuWI/SKXHFPrKoCI/AAAAAAAAAGk/wuagaOL0q5Y/s72-c/250px-International_Morse_Code.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-3467609353140323051</id><published>2008-08-15T16:37:00.011+02:00</published><updated>2008-09-24T05:48:23.171+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>Au coeur des fonctions C, dissection d' une fonction</title><content type='html'>Qu' est-ce qui ce passe avant, pendant, et après l' apel d' une fonction C ? C' est ce que je vais décrire pas à pas.Pour pouvoir suivre cette article il est indispensable de connaitre, le fonctionnement d' une stack (pile), et avoir les bases du language assembleur, syntaxe intel, et AT&amp;amp;T pour les sortie avec GDB, une connaissance aussi du debugger GDB ne sera pas de trop, et biensur une bonne maitrise du langage C, bien que ce soit juste les fonctions qui nous intéressent ici.&lt;br /&gt;&lt;br /&gt;Avant de commencer je vais quand même rappeler brièvement quelques points fondamentaux.&lt;br /&gt;&lt;br /&gt;La mémoire d' un ordinateur est adressée par mot (word) de 4 octets (32bit) et débute à &lt;span style="color: rgb(255, 0, 0);"&gt;0x0000000&lt;/span&gt; et fini à &lt;span style="color: rgb(255, 0, 0);"&gt;0xfffffff&lt;/span&gt;.&lt;br /&gt;Cette espace de mémoire est divisé en deux zones :&lt;br /&gt;&lt;br /&gt;1) L 'espace user de &lt;span style="color: rgb(255, 0, 0);"&gt;0x00000000&lt;/span&gt; à &lt;span style="color: rgb(255, 0, 0);"&gt;0xbfffffff&lt;/span&gt;&lt;br /&gt;2) L 'espace kernel de &lt;span style="color: rgb(255, 0, 0);"&gt;0xc0000000&lt;/span&gt; à &lt;span style="color: rgb(255, 0, 0);"&gt;0xffffffff&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quand un processus est lancer , il est mappé en mémoire et dispose d' un espace de mémoire indépendant de tout les autres processus.(En gros je passe les détails)&lt;br /&gt;Une fois charger en mémoire le processus est divisé en plusieur section:&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;.text&lt;/span&gt; la ou est placer le code du programme&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;.data&lt;/span&gt; la ou sont placer les données initialisées ou non.&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;.bss&lt;/span&gt; la ou sont placer les données globales non initialisées&lt;br /&gt;&lt;br /&gt;En plus il y a la stack (pile) qui sert de stockage pour y placer des données temporaire, les variables local d' une fonction seront par exemple placer sur la pile.Maintenant essayons de comprendre le fonctionnement de cette stack.&lt;br /&gt;La stack peut être vue comme une jeux de carte, elle grandit vers les adresses basses, pour revenir au jeux de carte c 'est comme si on ajoutais des cartes par dessous, on appelera &lt;span style="color: rgb(255, 0, 0);"&gt;%ebp&lt;/span&gt; la base de la pile donc le sommet de notre jeux de carte, et on appelera toujour &lt;span style="color: rgb(255, 0, 0);"&gt;%esp&lt;/span&gt; le pointeur vers la dernière valeur(carte) qu' on a ajouter.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;adresse haute  ------  %ebp  ( haut du jeux de carte )&lt;br /&gt;          ------&lt;br /&gt;          ------&lt;br /&gt;adresse basse  ------   &lt;-- %esp  ( dernière carte ajouter ) &lt;/pre&gt;&lt;br /&gt;l' opcode &lt;span style="color: rgb(255, 0, 0);"&gt;push&lt;/span&gt; ajoute une carte, et &lt;span style="color: rgb(51, 204, 0);"&gt;pop&lt;/span&gt; retire une carte, ce qu' il faut bien retenir surtout, c' est que cette pile marche selon le modele LIFO "last in first out" c' est à dire que la dernière donnée(carte) ajouter sera toujour le première à sortir.&lt;br /&gt;Enfaite on ne verra pas ces 2 instructions ici,car gdb utilise la syntax AT&amp;amp;T qui est je l' avoue franchement plus chiante a lire que celle d' intel, mais bon, on a rien sans rien donc on apprend les deux et on s' écrase...&lt;br /&gt;&lt;br /&gt;Voila c' étais bref mais le but n' est pas de faire un cour sur l' assembleur et la mémoire d' un ordinateur.&lt;br /&gt;&lt;br /&gt;Bon pour tout le reste de cette article je me baserais uniquement sur cette exemple de programme C:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int addition(int parametre1, int parametre2)&lt;br /&gt;{&lt;br /&gt;int res = 0;&lt;br /&gt;res = parametre1 + parametre2;&lt;br /&gt;printf("%d", res);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;addition(5, 6);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Donc maintenant on compile et lance avec celui qui va nous permettre d' analyser le programme [ GDB ]:&lt;br /&gt;&lt;br /&gt;Afin d' avoir des valeurs qui tombe juste j' ai compiler avec l' option &lt;span style="color: rgb(255, 0, 0);"&gt;-mpreferred-stack-boundary=2&lt;/span&gt; et &lt;span style="color: rgb(255, 0, 0);"&gt;-g&lt;/span&gt; bien évidement pour le debug.&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;napoleon@s4t4n:~$ gdb ./exemple&lt;br /&gt;GNU gdb 6.8-debian&lt;br /&gt;Copyright (C) 2008 Free Software Foundation, Inc.&lt;br /&gt;License GPLv3+: GNU GPL version 3 or later &amp;lt;http://gnu.org/licenses/gpl.html&amp;gt;&lt;br /&gt;This is free software: you are free to change and redistribute it.&lt;br /&gt;There is NO WARRANTY, to the extent permitted by law.  Type "show copying"&lt;br /&gt;and "show warranty" for details.&lt;br /&gt;This GDB was configured as "i486-linux-gnu"...&lt;br /&gt;(gdb) disass main&lt;br /&gt;Dump of assembler code for function main:&lt;br /&gt;0x0804839f &amp;lt;main+0&amp;gt;:    push   %ebp&lt;br /&gt;0x080483a0 &amp;lt;main+1&amp;gt;:    mov    %esp,%ebp&lt;br /&gt;0x080483a2 &amp;lt;main+3&amp;gt;:    sub    $0x8,%esp&lt;br /&gt;0x080483a5 &amp;lt;main+6&amp;gt;:    movl   $0x6,0x4(%esp)&lt;br /&gt;0x080483ad &amp;lt;main+14&amp;gt;:   movl   $0x5,(%esp)&lt;br /&gt;0x080483b4 &amp;lt;main+21&amp;gt;:   call   0x8048374 &amp;lt;addition&amp;gt;&lt;br /&gt;0x080483b9 &amp;lt;main+26&amp;gt;:   mov    $0x0,%eax&lt;br /&gt;0x080483be &amp;lt;main+31&amp;gt;:   leave&lt;br /&gt;0x080483bf &amp;lt;main+32&amp;gt;:   ret&lt;br /&gt;End of assembler dump.&lt;br /&gt;(gdb) disass addition&lt;br /&gt;Dump of assembler code for function addition:&lt;br /&gt;0x08048374 &amp;lt;addition+0&amp;gt;:        push   %ebp&lt;br /&gt;0x08048375 &amp;lt;addition+1&amp;gt;:        mov    %esp,%ebp&lt;br /&gt;0x08048377 &amp;lt;addition+3&amp;gt;: sub    $0xc,%esp&lt;br /&gt;0x0804837a &amp;lt;addition+6&amp;gt;: movl   $0x0,-0x4(%ebp)&lt;br /&gt;0x08048381 &amp;lt;addition+13&amp;gt;: mov    0xc(%ebp),%eax&lt;br /&gt;0x08048384 &amp;lt;addition+16&amp;gt;: add    0x8(%ebp),%eax&lt;br /&gt;0x08048387 &amp;lt;addition+19&amp;gt;: mov    %eax,-0x4(%ebp)&lt;br /&gt;0x0804838a &amp;lt;addition+22&amp;gt;: mov    -0x4(%ebp),%eax&lt;br /&gt;0x0804838d &amp;lt;addition+25&amp;gt;: mov    %eax,0x4(%esp)&lt;br /&gt;0x08048391 &amp;lt;addition+29&amp;gt;: movl   $0x8048480,(%esp)&lt;br /&gt;0x08048398 &amp;lt;addition+36&amp;gt;: call   0x80482d8 &amp;lt;printf@plt&amp;gt;&lt;br /&gt;0x0804839d &amp;lt;addition+41&amp;gt;: leave&lt;br /&gt;0x0804839e &amp;lt;addition+42&amp;gt;: ret&lt;br /&gt;End of assembler dump.&lt;br /&gt;(gdb)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Commencons par regarder ce qui ce passe en main+6 car c' est ici que débute notre fonction.Enfaite c' est pas le début mais la préparation de la fonction, a ce moment elle n' a pas encore été appelé.&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;movl $0x6,0x4(%esp)&lt;/span&gt;&lt;br /&gt;Cette instruction peut être traduite par : Ajoute la valeur 0x6 (6 en décimal) a +4 de l' adresse pointé par %esp.En syntaxe Intel on pourrais faire push dword 0x6&lt;br /&gt;Et oui ! %esp contient une adresse.&lt;br /&gt;Et cette valeur 6 est bien le deuxième argument de notre fonction addition, enfaite il empile les valeurs en sens inverse ce qui ce vérifie encore en main+14 movl $0x5,(%esp) ou il empile le premier argument.&lt;br /&gt;&lt;br /&gt;En main+21 on retrouve un call:&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;call 0x8048374 &amp;lt;addition&amp;gt;&lt;/span&gt;&lt;br /&gt;call est un saut inconditionnel c' est à dire que lorsque qu' il arrive ici il saute sans aucune condition a l' adresse 0x8048374 qui est bien l' adresse de notre fonction addition:&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;0x08048374 &amp;lt;addition+0&amp;gt;: push %ebp&lt;/span&gt;&lt;br /&gt;Pendant cette apel il va ce passer une opération implicite, il va sauvegarder l' adresse de retour de la fonction, donc %eip, puisque je rapel que %eip pointe toujour sur l' adresse de la prochaine instruction à executer.&lt;br /&gt;&lt;br /&gt;Une fois nos argument, et l' adresse de retour sauvegarder il va ce passer ce qu' on apel le prologue de la fonction:&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;0x08048374 &amp;lt;addition+0&amp;gt;: push %ebp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;0x08048375 &amp;lt;addition+1&amp;gt;: mov %esp,%ebp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En addition+0 il prepare le nouvel environnement pour la fonction addition,il sauvegarde %ebp sur la pile, puis en addition+1 il met %esp dans %ebp donc a ce moment la &lt;span style="color: rgb(255, 102, 102);"&gt;%ebp = %esp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Après il va reserver de la place pour les variables locales de la fonction.Il décremente %esp de 12(0xc), en gros il soustrait 12 a %esp:&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;sub $0xc,%esp&lt;/span&gt;&lt;br /&gt;Pourquoi 12 ? Un peu de calcul, nous avons 3 variables de type (int) qui sont des entiers, un entier en général prend 4 octets, donc 3 x 4 = 12 (0xc), par contre si on aurais un char, donc 1 octets il aurais quand même reserver 0x4 puisque il réserve que des multiples de 4, si on on aurais un chaine de 6 octets il aurais réserver 0x8 (a ne pas oublier).&lt;br /&gt;&lt;br /&gt;Ensuite passons en addition+13 et addition+14&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;mov 0xc(%ebp),%eax&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;add 0x8(%ebp),%eax&lt;/span&gt;&lt;br /&gt;Il place la valeur qui est en %ebp+12 dans %eax, puis en addition+16 il additione la valeur qui est placer en %ebp+8 avec la valeur de %eax.&lt;br /&gt;&lt;br /&gt;Regardond de plus près ce que contient %ebp+12, %ebp+8 à ce moment la:&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;&lt;br /&gt;(gdb) b addition&lt;br /&gt;Breakpoint 1 at 0x804837a: file exemple.c, line 5.&lt;br /&gt;(gdb) r&lt;br /&gt;Starting program: /home/napoleon/exemple&lt;br /&gt;&lt;br /&gt;Breakpoint 1, addition (parametre1=5, parametre2=6) at exemple.c:5&lt;br /&gt;5      int res = 0;&lt;br /&gt;(gdb) x/bc $ebp+12&lt;br /&gt;0xbf8535d4: 6 '\006'&lt;br /&gt;(gdb) x/bc $ebp+8&lt;br /&gt;0xbf8535d0: 5 '\005'&lt;br /&gt;(gdb)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La tout devient plus clair !!&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;mov 0xc(%ebp),%eax&lt;/span&gt; place moi la valeur 0x6(6 en déacimal) dans %eax.&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;add 0x8(%ebp),%eax&lt;/span&gt; Additionne moi la valeur placer dans %ebp+8 qui est donc 0x5 (5 en décimal) avec %eax.&lt;br /&gt;ce qui donne bien l' addition qu' on lui a demander de faire 5+6 dans la fonction.&lt;br /&gt;&lt;br /&gt;Vérifions maintenant ce que contient %eax à la ligne 7:&lt;br /&gt;&lt;div class="shell"&gt;&lt;br /&gt;Breakpoint 2 at 0x804838a: file exemple.c, line 7.&lt;br /&gt;(gdb) c&lt;br /&gt;Continuing.&lt;br /&gt;&lt;br /&gt;Breakpoint 2, addition (parametre1=5, parametre2=6) at exemple.c:7&lt;br /&gt;7      printf("%d", res);&lt;br /&gt;(gdb) p $eax&lt;br /&gt;$1 = 11&lt;br /&gt;(gdb)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Il est donc clair que %eax sers a manipuler des données, beaucoup d' opération passe par lui, entre autre ici il contient le résultat de notre opération soit (11).&lt;br /&gt;&lt;br /&gt;En dernier il faut remmettre l' état de la pile comme elle était avant l' apel de la fonction, ce qui ce fait avec ces deux instructions:&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;leave&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;ret&lt;/span&gt;&lt;br /&gt;Enfaite leave est équivalent à:&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;mov ebp,esp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;pop ebp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Donc %ebp et %esp reviennent ou ils étaient avant l' apel de la fonction.&lt;br /&gt;Puis viens le&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;ret&lt;/span&gt;&lt;br /&gt;Qui a pour effet de dépiler %eip qui contient l' adresse de retour. ainsi le programme reprendra son execution la ou il l' avait interrompu.&lt;br /&gt;On verra dans un autre article qu' il est possible de modifier cette adresse de retour afin que le programme saute ou on lui dit de sauter, c' est le principe des buffer overflow et d' ailleur cette article est je pense une bonne mise en jambe pour ça.  &lt;br /&gt;Voilà on a vue en détail avant, pendant, et après l' apel d' une fonction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-3467609353140323051?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/3467609353140323051/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=3467609353140323051&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/3467609353140323051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/3467609353140323051'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/au-coeur-des-fonctions-c-dissection-d.html' title='Au coeur des fonctions C, dissection d&apos; une fonction'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-4920147173599252369</id><published>2008-08-13T20:04:00.023+02:00</published><updated>2008-08-14T20:32:07.759+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>comprendre les injections SQL</title><content type='html'>Qu' est ce qu' une injection SQL?&lt;br /&gt;Tout d' abord on va preparer le terrain et voir ce qu' est une requête normal.&lt;br /&gt;Nous allons tout le long de cette article travailler avec cette table de 3 champs ( id, pseudo, password ).&lt;br /&gt;&lt;br /&gt;Et voila les enregistrement de cette table:&lt;br /&gt;&lt;br /&gt;|  1 | alain      | pofigljfh  |&lt;br /&gt;|  2 | admin      | tupacritu  |&lt;br /&gt;|  3 | moderateur | mfgpgfkg   |&lt;br /&gt;|  4 | boby       | mdgdggfkg  |&lt;br /&gt;|  5 | janine     | fofofofofo |&lt;br /&gt;&lt;br /&gt;Et nous allons imaginer cette situation, ou le programmeur à oublié, de filtrer les entrer de la base de donnée et que l' option magic_quote_gpc est a Off dans le php.ini.&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;$connexion = mysql_connect('localhost','user','motDePasse');&lt;br /&gt;&lt;br /&gt;mysql_select_db('injection');&lt;br /&gt;&lt;br /&gt;if(isset($pseudo) AND isset($pass))&lt;br /&gt;{&lt;br /&gt;  $req = "SELECT pseudo,password FROM `essai` WHERE pseudo='$pseudo' AND password='$pass'";&lt;br /&gt;&lt;br /&gt;  $res = mysql_query($req);&lt;br /&gt;&lt;br /&gt;  while($x = mysql_fetch_array($res))&lt;br /&gt;  {&lt;br /&gt;      echo $x['pseudo']. ' ' .$x['password'].'&lt;br /&gt;';  } }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Donc le script PHP attend un pseudo et un mot de passe, transmis par le formulaire via la method POST, une fois qu' il a le pseudo et le mot de passe il envoie la requête a la base de donné qui elle cherche si dans la table essai si il ce trouve un pseudo et un mot de passe qui correspond a ce que l' utilisateur à rentrer. si elle trouve une correspondance elle l' affiche sinon elle ne renvoi rien du tout.&lt;br /&gt;Donc si l utilisateur est (alain) et a pour mot de passe (pofigljfh) la requête deviendra (en vert c' est ce que rentre l' utilisateur).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;SELECT pseudo,password FROM `essai` WHERE pseudo='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;alain&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;' AND password='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:100%;" class="vert" &gt;pofigljfh&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;'&lt;/span&gt;&lt;p&gt;Et l utilisateur sera authentifié car il y a bien une correspondance dans la table.&lt;br /&gt;Maintenant en sachant que le script ne filtre pas les caractère spéciaux il est facile de déformer la requête.&lt;br /&gt;Regardons cette exemple (en vert c' est ce que rentre l' utilisateur): &lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;SELECT pseudo,password FROM `essai` WHERE pseudo='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;alain' OR '1'='1&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;' AND password='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;chaineAuHazard' OR '1'='1&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;Le truc c' est que la condition sera toujour vrai puisque , on demande d afficher les champs ou (1 est égal à 1) donc bête et discipliner le programme renverra tout les enregistrements de la base, avec le pseudo et mot de passe de l' administrateur.Voici quelque autre exemple ou l' egalité est toujours vrai:&lt;/p&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;WHERE pseudo='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:100%;" class="vert" &gt;alain' OR 'a'='a&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;' AND password='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:100%;" class="vert" &gt;chaineAuHazard' OR 'a'='a&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;'&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;WHERE pseudo='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;alain' OR 'a'='a&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;' AND password='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;bloup' OR 'b' between 'a' AND 'c&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;p&gt;Le dernier exemple est aussi valide et oui car on demande les champs ou b est entre a et c.&lt;br /&gt;Aller pour la forme un dernier, on sais que les commentaires en SQL commencent par un # c' est a dire que tout ce qui ce trouve après sera ignorer.Ici on va imaginer que l on connais juste le pseudo de l administrateur du site.&lt;br /&gt;Mise en pratique:&lt;/p&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;SELECT pseudo,password FROM `essai` WHERE pseudo='&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:100%;" class="vert" &gt;admin'#&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;' AND password='&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" class="vert" &gt;bloup&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;'&lt;/span&gt;&lt;br /&gt;Donc ici pas besoin du mot de passe puisque le password est mis en commentaire.Donc voila quelque exemple parmis tant d' autre, mais comment sécurisé tous ca?&lt;br /&gt;Avec la fonction mysql_escape_string() ou mysql_real_escape_string() par exemple.&lt;br /&gt;Donc notre script securisé devient:&lt;br /&gt;&lt;span style="font-size:100%;"&gt;SELECT pseudo,password FROM `essai` WHERE pseudo='&lt;/span&gt;&lt;span class="vert"  style="font-size:100%;"&gt;mysql_escape_string($pseudo)&lt;/span&gt;&lt;span style="font-size:100%;"&gt;' AND password='&lt;/span&gt;&lt;span class="vert"  style="font-size:100%;"&gt;mysql_escape_string($pass)&lt;/span&gt;&lt;span style="font-size:100%;"&gt;'&lt;/span&gt;&lt;br /&gt;Je ne vais pas passer en revue tout les types d' injection car chaque cas est différent mais les base sont là.&lt;br /&gt;&lt;br /&gt;::: conseil &lt;br /&gt;&lt;br /&gt;Je ne peut que vous conseiller de mettre séverement à l' épreuve votre site avant de le publier, il ne faut pas oublier que le but premier d' un hacker est de faire planter votre script afin qu' il génère une erreur, vous allez me dire pourquoi ?&lt;br /&gt;C' est tout simplement pour obtenir des informations sur vos bases,vos tables, les noms des champs, la version de mysql etc ...&lt;br /&gt;Protèger chaque variable quand vous le pouvez avec une fonction adapté, vous avez le choix, mysql et PHP disposent de beaucoup de fonctions pour vérifier les types des donnés, échappé les caractère spéciaux etc ...&lt;br /&gt;Rentrer des caractères dans l' url comme %22 %23 %27 %25 %24 %5E %3B %2C %3A %21 %3C %3E et analyser le comportement du script, il ne doit y avoir aucun message d' erreur qui s' affiche, n' oublier pas qu' il est possible de cacher les messages d' erreur avec un @ placer devant le nom d' une fonction ou d' une instruction.D' autre par ne laisser pas trainer des fichiers inutile.&lt;br /&gt;&lt;strong&gt;Faite tout ce qui est possible et imaginable pour faire planter votre script !! et corriger les erreurs.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-4920147173599252369?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/4920147173599252369/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=4920147173599252369&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/4920147173599252369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/4920147173599252369'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/comprendre-les-injections-sql.html' title='comprendre les injections SQL'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-2993869779002049956</id><published>2008-08-10T07:52:00.000+02:00</published><updated>2008-08-10T21:24:51.659+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programmation'/><title type='text'>Le padding de GCC qui énerve ..</title><content type='html'>&lt;span style="font-size: 100%"&gt;Je suis assez enerver de voir que gcc n' en fait qu' a sa tête,a partir de la version 3.x il rajoute un padding a chaque fois,  un exemple :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background: #ffffcc; color: black;border:1px dashed black; padding: 10px; font-size: 90%;"&gt;napoleon@s4t4n:~$cat exemple.c&lt;br /&gt;int adi()&lt;br /&gt;{&lt;br /&gt;int a = 5;&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;napoleon@s4t4n:~$ gcc -c -g exemple.c&lt;br /&gt;napoleon@s4t4n:~$ gcc -o exemple exemple.o&lt;br /&gt;napoleon@s4t4n:~$ gcc -S exemple.c&lt;br /&gt;napoleon@s4t4n:~$ gdb ./exemple &lt;br /&gt;GNU gdb 6.8-debian&lt;br /&gt;Copyright (C) 2008 Free Software Foundation, Inc.&lt;br /&gt;License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;&lt;br /&gt;This is free software: you are free to change and redistribute it.&lt;br /&gt;There is NO WARRANTY, to the extent permitted by law.  Type "show copying"&lt;br /&gt;and "show warranty" for details.&lt;br /&gt;This GDB was configured as "i486-linux-gnu"...&lt;br /&gt;(gdb) disass adi&lt;br /&gt;Dump of assembler code for function adi:&lt;br /&gt;0x08048344 &lt;adi+0&gt;: push   %ebp&lt;br /&gt;0x08048345 &lt;adi+1&gt;: mov    %esp,%ebp&lt;br /&gt;0x08048347 &lt;adi+3&gt;: sub    $0x10,%esp&lt;br /&gt;0x0804834a &lt;adi+6&gt;: movl   $0x5,-0x4(%ebp)&lt;br /&gt;0x08048351 &lt;adi+13&gt;: leave  &lt;br /&gt;0x08048352 &lt;adi+14&gt;: ret    &lt;br /&gt;End of assembler dump.&lt;br /&gt;(gdb) &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Comme on le voit a l' adresse 0x08048347 il soustrait 0x10 (16 en decimal) octets a esp, alors qu' il ne devrait en soustraire que 0x4 (4 en decimal) puisque chez moi un int prend 4 octets en mémoire.&lt;br /&gt;&lt;br /&gt;Donc après une petite recherche sur google j' ai trouver comment éviter cela, la solution est de compiler avec -mpreferred-stack-boundary=2 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background: #ffffcc; color: black; border:1px dashed black; padding: 10px; font-size: 90%;"&gt;&lt;br /&gt;napoleon@s4t4n:~$ gcc -c -g -mpreferred-stack-boundary=2 exemple.c&lt;br /&gt;napoleon@s4t4n:~$ gcc -o exemple exemple.o&lt;br /&gt;napoleon@s4t4n:~$ gcc -S exemple.c&lt;br /&gt;napoleon@s4t4n:~$ gdb ./exemple &lt;br /&gt;GNU gdb 6.8-debian&lt;br /&gt;Copyright (C) 2008 Free Software Foundation, Inc.&lt;br /&gt;License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;&lt;br /&gt;This is free software: you are free to change and redistribute it.&lt;br /&gt;There is NO WARRANTY, to the extent permitted by law.  Type "show copying"&lt;br /&gt;and "show warranty" for details.&lt;br /&gt;This GDB was configured as "i486-linux-gnu"...&lt;br /&gt;(gdb) disass adi&lt;br /&gt;Dump of assembler code for function adi:&lt;br /&gt;0x08048344 &lt;adi+0&gt;: push   %ebp&lt;br /&gt;0x08048345 &lt;adi+1&gt;: mov    %esp,%ebp&lt;br /&gt;0x08048347 &lt;adi+3&gt;: sub    $0x4,%esp&lt;br /&gt;0x0804834a &lt;adi+6&gt;: movl   $0x5,-0x4(%ebp)&lt;br /&gt;0x08048351 &lt;adi+13&gt;: leave  &lt;br /&gt;0x08048352 &lt;adi+14&gt;: ret    &lt;br /&gt;End of assembler dump.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: 100%"&gt;Et la miracle il nous a bien reservé les 4 octets normalement ! Que demande le peuple ? hien ??&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-2993869779002049956?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/2993869779002049956/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=2993869779002049956&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2993869779002049956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/2993869779002049956'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/les-dlires-de-gcc-qui-enerve.html' title='Le padding de GCC qui énerve ..'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-1828455862296095350</id><published>2008-08-08T17:43:00.012+02:00</published><updated>2008-11-22T09:55:47.800+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><title type='text'>Obfuscation de code en javascript</title><content type='html'>&lt;p&gt;Pour la petite hisoire :&lt;br /&gt;&lt;br /&gt;Napol3on ce balladait dans le rayon presse du centre commercial Auchan près de chez lui, soudain il tombe sur le dernier numéro du mag haking, un chapitre parle justement de l' obfuscation de code en javascript, après avoir rapidement jetter un coup d' oeil dessus, je me suis dit,tiens je vais me coder un petit truc équivalent en rentrant !....Et voila le resultat :&lt;/p&gt; &lt;br /&gt;&lt;span style="font-size:100%;"&gt;Technique de chiffrement simple :&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var i, key;&lt;br /&gt;/* Ici est placer la chaine chiffrer */&lt;br /&gt;var src_enc = 'bmfsu)((*';&lt;br /&gt;&lt;br /&gt;key = 1;&lt;br /&gt;src_dec = '';&lt;br /&gt;for(i = 0; i &lt; 9;i++){&lt;br /&gt;as = src_enc.charCodeAt(i) - key;&lt;br /&gt;src_dec = src_dec+String.fromCharCode(as);&lt;br /&gt;}&lt;br /&gt;eval(src_dec);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Ce script est très simple, on lui donne le script malicieux dans src_enc avec a chaque fois la prochaine lettre dans l alphabet, ce qui donne simplement : alert(''); pour l ' exemple, après on parcourt la chaine avec charCodeAt() qui renvoi le code ascii de chaque caractere de la chaine - 1 et le stock dans 'as', il reste simplement a faire l' inverse avec String.fromCharCode() qui renvoie la valeur du code ascii de chaque caractère, et en dernier avec la fonction eval() on fait executer le code.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-1828455862296095350?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/1828455862296095350/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=1828455862296095350&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/1828455862296095350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/1828455862296095350'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/obfuscation-de-code-en-javascript_08.html' title='Obfuscation de code en javascript'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3843526007960355155.post-6705911572886005659</id><published>2008-08-08T09:25:00.015+02:00</published><updated>2008-11-22T09:58:49.687+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité informatique'/><title type='text'>Rats : Rough Auditing Tool Sécurity</title><content type='html'>RATS est un logiciel d' audit de code, a tester :&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Explication des options : &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -d : spécifier une base de donnée de vulnérabilité alternative&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -h : affiche l'aide d'utilisation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -i : rapporte les fonctions qui autorise des entrées externes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -l : force le langage à auditer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -r : inclus les références qui ne sont pas des appels de fonctions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -w &lt;1,2,3&gt; : niveau d'alerte (par défault 2)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -x : ne charge pas la base de donnée des vulnérabilités par défaul&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# -R : n'autorise pas l'analyse récursive des fichiers audités&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# --xml : rapport d'audit au format XML&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# --html : rapport d'audit au format HTML&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# --follow-symlinks : suit les liens symboliques&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# --columns : Affiche la colonne dans laquelle RATS a trouver un problème de sécurité&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:90%;"&gt;# --context : Affiche la ligne dans laquelle RATS a trouver un problème de sécurité&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Exemple:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="shell"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void copier(char *chaine)&lt;br /&gt;{&lt;br /&gt;  char buffer[100];&lt;br /&gt;  strcpy(buffer, chaine);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc,char *argv[])&lt;br /&gt;{&lt;br /&gt;  if(argc &lt; 2)&lt;br /&gt;    {&lt;br /&gt;      fprintf(stderr,"oups! et la chaine de caractere elle est ou ?\n\n");&lt;br /&gt;      exit(EXIT_FAILURE);&lt;br /&gt;    }&lt;br /&gt;  copier(argv[1]);&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Au dessus le programme C vulnérable, dans ce programme j' ai volontairement laisser trainer un buffer de taille fixe de 100 octets, le programme prend en argument une chaine de caractere qui sera transmis a la fonction copier() et placer dans le buffer .ça sens le BOF a 3km !  Bon si il affiche pas d 'alerte c' est qu' il est a mettre dans la corbeille :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:90%; color: teal;"&gt;n4pol3on@debian:~/prog_C$ rats -l c --columns --context --html vuln.c&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="shell"&gt;RATS results.&lt;br /&gt;&lt;br /&gt;Issue: fixed size global buffer&lt;br /&gt;&lt;br /&gt;Extra care should be taken to ensure that character arrays that are&lt;br /&gt;allocated on the stack are used safely.  They are prime targets for&lt;br /&gt;buffer overflow attacks.                    &lt;------ Bien vue l amis rats !&lt;br /&gt;File: vuln.c  Line:7   char buffer[100];   &lt;------- Le buffer que je parlais&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Issue: strcpy                              &lt;-------- La fonction strcpy() &lt;br /&gt;Severity: High &lt;br /&gt;Check to be sure that argument 2 passed to this function call will no  copy more data than can be handled, resulting in a buffer overflow.   &lt;--------- Bien vue l' araignée&lt;br /&gt;File: vuln.c  Line:8   strcpy(buffer, chaine);  &lt;--------- aie aie aie !!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Inputs detected at the following points &lt;br /&gt;Total lines analyzed: 38&lt;br /&gt;Total time 0.032423 seconds&lt;br /&gt;1172  lines per second&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Voila un exemple affreusement exagerer mais c ' est simplement histoire de montrer son utilisation, qui est extremement simple, ceci dit il vaut mieu jetter quand même un coup d' oeil soit même au code ..  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3843526007960355155-6705911572886005659?l=code-linux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-linux.blogspot.com/feeds/6705911572886005659/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3843526007960355155&amp;postID=6705911572886005659&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/6705911572886005659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3843526007960355155/posts/default/6705911572886005659'/><link rel='alternate' type='text/html' href='http://code-linux.blogspot.com/2008/08/rats-rough-auditing-tool-scurity.html' title='Rats : Rough Auditing Tool Sécurity'/><author><name>NapoleoN</name><uri>http://www.blogger.com/profile/07552201427763367186</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
