Franck De Goër. Tuteur : Marie-Laure Potet. Ensimag - Verimag degoerdf@ensimag.fr. 16 mai 2013

Dimension: px
Commencer à balayer dès la page:

Download "Franck De Goër. Tuteur : Marie-Laure Potet. Ensimag - Verimag degoerdf@ensimag.fr. 16 mai 2013"

Transcription

1 Vulnérabilités aux injections de NOP sur cartes à puce ranck De Goër uteur : Marie-Laure Potet Ensimag - Verimag degoerdf@ensimag.fr 16 mai 2013 Introduction Les cartes à puces se sont généralisées depuis les années 80, et contiennent aujourd hui des données sensibles (cartes bancaires, e-passeports, badges d accès, etc.). Il est donc primordial qu elles présentent une robustesse maximale à tout type d attaque, que ce soit matériel ou logiciel. Par exemple, il est préférable qu une personne malveillante ne soit pas en mesure d utiliser une carte bleue sans connaître son code PIN. À ce titre, de même que l on teste les serrures de coffre-fort d une part, et la résistance de la porte dudit coffre d autre part, la sécurité du code ainsi que la protection matérielle de la carte doivent être éprouvées. Nous nous intéressons dans ce papier à l évaluation de la robustesse d un code s exécutant sur carte à puce, face aux attaques classiques du domaine (ces attaques sont introduites en section 1, et largement expliquées dans le papier de Bar-El, Choukri, Naccache, unstall et Whelan [1]). Nous nous intéresserons particulièrement à la possibilité de détecter au niveau source des vulnérabilités pouvant être exploitées par un attaquant durant l exécution du programme. Les autorités de certification de cartes à puce (CESI 1 ) ont besoin de vérifier la robustesse d un code avant de le valider. Il est donc nécessaire de développer des outils d analyse qui vont dans ce sens, c est-à-dire permettant la détection automatisée de vulnérabilités. À l heure actuelle, leur protocole de validation, détaillé dans la partie 2.1, est basé sur des tests exhaustifs en brute force, indépendamment de la sémantique du code testé (nous y reviendrons dans la section 2.1). L approche Lazart (introduite dans le papier de Potet, Mounier et Vivien [2], et sur laquelle nous revenons en section 2.2), quant à elle, bien que non exhaustive, permet de détecter les vulnérabilités au niveau du code source. L avantage de cette approche est qu elle reste praticable même lorsque le modèle de faute est complexifié (e.g. l attaquant peut introduire un nombre quelconque de fautes). Elle est complémentaire à l approche du CESI, en ce sens qu elle permet de mettre en évidence des points sensibles du programme qu il est particulièrement intéressant de tester. À l heure actuelle, Lazart ne détecte que les vulnérabilités liées aux inversions de test, comme détaillé section 2.2. L objectif de ce papier est d étendre cette approche aux attaques NOP. Ces attaques, décrites plus précisément en section 3, consistent à empêcher l exécution de certaines instructions d un programme lors de l exécution. Dans la section 1, nous décrirons le principe d une attaque laser sur carte à puce et ses conséquences. En 2, nous verrons les différentes approches existantes pour détecter des vulnérabilités aux attaques laser. Les sections 3 et 4 présentent notre contribution au domaine : en 3, nous ferons un descriptif détaillé du type d attaque étudié et ses conséquences ; et en 4 nous présenterons une implémentation s insérant dans l approche Lazart pour détecter ce type d attaques. 1. Centre d Évaluation de la Sécurité des echnologies de l Information : organisme chargé de valider la robustesse des codes exécutés sur carte avant commercialisation 1

2 ranck De Goër able des matières 1 Principe d une attaque laser 3 2 Détections de vulnérabilité aux injections de faute : approches existantes Au niveau binaire : brute-tests Au niveau source : Lazart Coloration du graphe de flot Génération de mutants ests symboliques sur les mutants Sensibilité à l introduction de NOP Pertinence des NOP Attaques de type JUMP NOP Boucle while Structure if elsif else Retours de fonction Implémentation et résultats Noppy Inclusion dans l approche Lazart Algorithme de base d ajout d arcs Sur un exemple : verify Mutation et coloration du CG Production de codes mutants et analyse dynamique sur le CG modifié A Efficacité des détections au niveau source et au niveau binaire 21 B Deux conséquences differentes à une attaque de type NOP sur une boucle while 21 C Mutant de verify pour analyse dynamique 22 2

3 ranck De Goër 1 Principe d une attaque laser Nous présentons dans cette section le principe général d une attaque classique sur carte à puce : l attaque au laser par injection de faute. L idée est de modifier une valeur de la mémoire afin de modifier le comportement à l exécution du programme à attaquer, et ce afin d obtenir des informations ou d outrepasser des authentifications. C est une attaque matérielle dans le sens où elle est insérée physiquement dans le système, mais sa répercution est directement liée au logiciel qui s exécute sur la carte. Dans les papiers de Pellegrini, Bertacco, Austin [3] et de Barenghi, Breveglieri, Koren, Pelosi, Regazzoni [4] sont décrites des attaques respectivement sur RSA et AES s exécutant sur carte à puce. Grâce à des injections de faute dans les calculs, il est possible de récupérer la clé privée (ou la clé symétrique dans le cas de l AES) embarquée dans la carte. Dans ces deux cas, il s agit d injection d erreurs de calculs durant le chiffrement d un même message afin de récupérer des informations sur la clef. La thèse de Maria Christofi [5] traite dans le chapitre 9 des analyses de vulnérabilité d implémentations cryptographiques face aux injections de faute. Dans ce papier, nous nous intéresserons plutôt à l injection de faute amenant non pas à des erreurs de calculs mais à une modification du chemin d exécution du code sur la carte. Ci-suit un exemple illustrant le principe de ce type d injection de faute. 1 int triesleft = 2; 2 3 int verify(char buffer[], int ofs, int len) { 4 int i; 5 /* No comparison if PIN is blocked */ 6 if(triesleft < 0) 7 return EXI_AILURE; 8 9 /* Main Comparison */ 10 for (i = 0; i < len; i++) { 11 if(buffer[ofs + i]!= pin[i]) { 12 triesleft--; 13 authenticated = 0; 14 return EXI_AILURE; 15 } 16 } /* Comparison is successful */ 19 triesleft = maxries; 20 authenticated = 1; 21 return EXI_SUCCESS; 22 } igure 1 Code de vérification du code PIN Ce code est chargé de vérifier le code PIN entré par l utilisateur de la carte. Nous voyons ici que si l utilisateur entre trois codes PIN erronés, la fonction renvoie EXI_AILURE, ce qui a pour effet de déclencher une contre-mesure (par exemple un blocage de la carte). Dans ce cas précis, l objectif de l attaquant est de sortir avec la valeur EXI_SUCCESS, ou encore de ne pas sortir avec la valeur EXI_AILURE qui peut entraîner le blocage de la carte. Pour ce faire, il peut par exemple injecter une faute consistant à forcer le résultat du test de la ligne 6 à ALSE afin de disposer de plus de trois essais. Dans la même idée, l attaquant peut empêcher l exécution de l instruction triesleft pour ne pas voir le nombre d essais diminuer. C est le principe d injection de 3

4 ranck De Goër faute : le comportement à l exécution peut être modifié pour amener le système dans un état imprévu. L injection de faute peut se faire de plusieurs manières, mais la principale utilisée sur carte à puce est l attaque au laser : l éclairage au laser d un transistor l amène régulièrement à introduire une erreur de valeur (chaque attaque de ce genre a un taux de réussite d environ 20%). Il est donc possible de changer la valeur de tests, de modifier des instructions ou encore de modifier des adresses de saut. L attaque qui nous intéresse particulièrement dans la suite est l introduction de NOP à la place d autres instructions, et notamment à la place de sauts, conditionnels ou non. L introduction d un NOP consiste à remplacer une instruction assembleur (par exemple BRA 0x5000 ou un JCC, dénotant un jump conditionnel générique 2 ) en instruction NOP qui est l instruction null : le saut est donc remplacé par une instruction vide, et le programme continue donc sans avoir effectué le BRA. Dans la section qui suit, nous décrivons les approches existantes pour détecter des vulnérabilités aux injections de faute à différents niveaux (binaire, source, etc.). 2 Détections de vulnérabilité aux injections de faute : approches existantes Il existe plusieurs approches possibles dans le but de détecter des vulnérabilités aux injections de faute sur un exécutable. 2.1 Au niveau binaire : brute-tests La première solution (utilisée notamment par le CESI) est une méthode d injection à l aveugle. À partir d un fichier binaire, des mutants 3 sont produits, correspondant chacun à l exécutable original dont un octet a été remplacé par 0x00 ou 0x (simulation d une injection de faute, cf section 2.4). Chaque mutant est exécuté. La plupart du temps, la modification d un octet amène à un exécutable qui ne s exécute pas correctement, mais parfois le système est amené dans un état imprévu (par exemple EXI_SUCCESS alors que le PIN n a pas été rentré). Pour certifier un programme, toutes les injections de faute possibles sont testées et ne doivent pas aboutir à une vulnérabilité. L exhaustivité de cette méthode repose sur l hypothèse que l attaquant n est en mesure de faire qu une unique injection de faute. Si l on considère possible la double (voire triple) injection de faute, le nombre de cas à couvrir devient trop important. 2.2 Au niveau source : Lazart L approche mise en place à Verimag n a pas le même point de départ : à partir du graphe de flot 4 (CG) d un programme, le but est de déterminer en combien d injections possibles l attaquant peut arriver à une situation compromettant la sécurité du système. l approche est découpée en trois grandes étapes (correspondant aux trois blocs de la figure 2) Coloration du graphe de flot À partir du code dont on veut évaluer la robustesse, le graphe de flot est généré (à l aide d une librairie llvm). Ensuite, étant donné un noeud du graphe dit critique (noeud à atteindre ou à éviter 2. Par exemple JEQ ou JNE 3. Un mutant correspond à une version modifiée du binaire original 4. Un graphe de flot est un graphe décrivant les chemins possibles que peut prendre une exécution. Chaque noeud correspond à un bloc d instructions séquentielles, et chaque arc correspond à un saut (conditionnel ou inconditionnel) 4

5 ranck De Goër appli.ll CG coloring mutation points mutation generation appli.ll attack objectives mutant.ll test directives KLEE attack paths robustness "proof" inconclusive igure 2 Schéma de l approche Lazart pour l attaquant, e.g. EXI_SUCCESS ou EXI_AILURE) l outil Lazart colorie le CG, en mettant en évidence les noeuds vulnérables à une injection de faute. On fournit en entrée du programme de colorisation un noeud à atteindre (par exemple EXI_SUCCESS). En sortie, les noeuds conduisant inévitablement vers le noeud à atteindre sont en vert, les noeuds ne pouvant plus conduire au but sont en rouge. Les noeuds pouvant amener soit dans le rouge soit dans le vert (selon le résultat des tests) sont en jaune, ou en orange s ils ont un fils direct qui est rouge. La figure 3 illustre sur l exemple du PIN la coloration d un CG. Dans ce cas, le but à atteindre est le noeud SUCCESS. On voit qu une fois un noeud AILURE atteint, il n est plus possible d atteindre le noeud SUCCESS, c est pourquoi ces noeuds ainsi que leurs fils sont rouges. L algorithme de coloration de graphe a été écrit et implémenté par J. Vivien [6]. entry: triesleft < 0? bb1 AILURE bb5: bb2: SUCCESS AILURE bb4: bb7 return: CG de la fonction 'verify' colorié (objectif : atteindre SUCCESS) igure 3 Exemple de coloration d un CG par Lazart 5

6 ranck De Goër Génération de mutants Une fois les noeuds vulnérables détectés, des mutants correspondant à des fautes injectées sont produits. En particulier, des compteurs sont introduits afin de compter le nombre de conditions forcées (et donc le nombre d attaques à réaliser). Des paramètres sont également ajoutées, afin d activer ou non chaque attaque. Ces mutants sont générés au niveau llvm 5. Les mutants générés correspondent à des inversions de test, systématiques sur les noeuds oranges et non systématiques sur les noeuds jaunes. bb: bb: bbi: bb1: bb2: bb1: (a) A mutation scheme (b) Mandatory mutation igure 4 Illustration des mutations sur le CG - Source : [2] La figure 4(a) représente un test critique (si évalué à false, l objectif ne sera plus atteignable). La figure 4(b) illustre un mutant modélisant une attaque non systématique : si le test est évalué à true, l exécution se prolonge avec le noeud bb1, et l attaquant n a pas besoin d intervenir pour éviter le rouge. En revanche, si le test est évalué à false, alors le compteur d attaques est incrémenté et on poursuit l exécution dans bb1 : cela modélise une inversion de test. La figure 5 montre au niveau C (afin d être plus lisible) à quoi ressemble un mutant généré à partir du cfg figure 4(a). 1 /* Noeud bb */ 2 if (triesleft > 0) { 3 /* bb1 */ 4 inst; 5 } else { 6 /* bb2 */ 7 return EXI_AILURE; 8 } 1 /* Noeud bb */ 2 if (triesleft > 0) { 3 /* bb1 */ 4 inst; 5 } else { 6 /* bb2 */ 7 fault ++; 8 } (a) Code initial (b) Attaque non systématique igure 5 Illustration de la génération de mutants ests symboliques sur les mutants Ces mutants sont ensuite fournis à Klee qui détermine le nombre d injections minimum amenant à atteindre l état critique. Klee est un outil de génération de cas de tests symboliques par couverture de (k) chemins. En sortie, Klee fournit les entrées qui permettent d activer les chemins faisables (c est-à-dire les chemins qui amènent à une fin d exécution et un respect des post-conditions. Ici par exemple, la valeur de retour doit être EXI_SUCCESS. On peut aussi ajouter des conditions sur le 5. Le langage llvm est un langage intermédiaire entre le source et le binaire : il offre la modularité nécessaire à la création automatique de mutants, tout en gardant une syntaxe assez aisément manipulable 6

7 ranck De Goër nombre d attaques, pour ne retenir que les chemins ne faisant pas intervenir plus de deux attaques 6.). Cette approche a l avantage de détecter rapidement les vulnérabilités aux injections d un programme, et ce quel que soit le nombre d injections maximum considéré. Cependant, à l heure actuelle, seules les attaques d inversion de test sont prises en compte. 2.3 Sensibilité à l introduction de NOP Nous proposons ici d étendre l approche Lazart aux attaques de type JUMP NOP 7 plus largement décrites section 3 (l intérêt d étudier ce type d attaques est également décrit en section 3, ainsi que dans la thèse de Xavier Kauffman-ourkestansky [7] section 3.4.2). Notre travail consiste à produire l ensemble des graphes de flot modifiés correspondant à des injections de NOP. Par la suite, Lazart nous fournira comme précédemment les noeuds vulnérables aux attaques, et Klee le nombre d attzaques réalsables, et pour chacune le nombre minimal d injections au laser nécessaires à leur réalisation. Nous présenterons en section 4 Noppy, une extension de Lazart traitant des injections de NOP. 2.4 Pertinence des NOP Les valeurs des fautes injectées dépendent beaucoup du composant cible, ainsi que du type de mémoire embarquée (EEPROM, ROM, RAM). Les fautes sont injectées par laser, en faisant augmenter la tension locale au niveau d un transistor, ce qui donne les trois fautes injectables suivantes possibles : 0x00 : sur une carte où le 0 est décidé lorsque la tension aux bornes d un transistor est au-dessus d un seuil critique 0x : à l inverse, possible sur les cartes où la valeur 1 est décidée lorsque la tension est au dessus d un certain seul 0xRand : parfois les valeurs stockées en mémoire sont des valeurs chiffrées, qui subissent des modifications lors de la lecture (déchiffrement). Dans ce cas, en injectant 0x00 ou 0x dans la mémoire, cela correspondra après déchiffrement à une valeur a priori aléatoire Dans la suite de ce papier, nous ne considérerons que les injections de 0x00 qui correspondent à l instruction NOP sur la plupart des architectures embarquées (voir able 1). Il est important de noter que cette approche ne correspond pas à toutes les cartes à puces : si l instruction NOP n est pas codée par 0x00 ou si la valeur 0x00 n est pas une valeur injectable sur la carte en question, ce modèle n est plus applicable. L étude faite reste valide, mais devient caduque, puisque l attaquant n est pas en mesure d introduire des NOP. 3 Attaques de type JUMP NOP Nous proposons dans cette section de présenter une étude détaillée des effets d une attaque qui consiste à remplacer une instruction de type JUMP par une instruction NOP. Une telle attaque est relativement facile à mettre en oeuvre, étant donné que dans la plupart des langages assembleurs utilisés sur les systèmes embarqués, l instruction NOP est codée par un ou plusieurs octets nuls (voir able 1). 6. Par exemple klee_assume(fault <= 2); 7. Notation que nous utiliserons dans ce papier, désignant le remplacement d un JUMP par un NOP 7

8 ranck De Goër CPU Architecture OPCODE SIZE (Byte) Intel x86 0x90 1 Intel x00 1 ARM 0x MIPS 0x PIC 0b ,5 able 1 Caractéristiques de l instruction NOP en assembleur pour quelques architectures En pratique, la réalisation d une attaque de cette forme correspond à la modification de l instruction exécutée par le processeur au moment où celle-ci est lue en mémoire. Nous ne nous intéresserons qu aux attaques qui amènent à une modification structurelle du graphe de flot (c est-àdire l ajout ou la suppression de noeuds ou d arcs) : les attaques d inversion de test par exemple ne seront pas détaillées pour ce type d attaque : cf [2]). Ces attaques en effet ont pour effet de modifier le déroulement de l exécution (et donc le chemin dans le CG), mais pas la structure du graphe. Les structures de code sensibles aux attaques JUMP NOP sont les suivantes : les boucles while et for : les deux types de boucles se traitent de la même manière, par conséquent nous ne nous intéresserons qu aux boucles while les structures conditionnelles if elsif else les structures switch : si, sémantiquement, ces structures sont un cas particulier des structures conditionnelles, elles sont généralement compilées différement, il serait donc intéressant de faire une étude approfondie des switch. Ce ne sera néanmoins pas traité dans ce papier les retours de fonction (détaillées ci-après) les appels de fonction Nous avons effectué une étude systématique des effets du remplacement d un JUMP par un NOP sur les structures conditionnelles if elsif else et while. Il est important de noter que les exemples qui suivent illustrent le principe d une attaque sur un schéma de compilation particulier. En effet, si notre travaille se situe au niveau source, il est tout de même dépendant du placement des blocs d instructions dans le fichier binaire afin de réaliser les attaques réelles. Par exemple, nous supposons que le bloc if se situe avant le bloc else dans le binaire (cf section 3.2). Nous avons utilisé le modèle le plus fréquent (celui utilisé notamment par gcc), mais l approche est à adapter au schéma de compilation effectivement utilisé. 3.1 Boucle while La figure 6 fournit un exemple de boucle while générique en assembleur. Dans cet exemple, on peut effectuer une attaque de type JUMP NOP à deux endroits : Ligne 7 : le remplacement de ce jump par une instruction NOP amène à la sortie de boucle. Dans le cas d une boucle while censée s exécuter n fois, l attaquant peut donc la forcer à s exécuter seulement k fois (avec k 1..n) (en imposant la sortie de boucle après k exécutions). Ligne 3 : une attaque ici évite la sortie de boucle. Dans ce cas, on force l exécution de la boucle un nombre de fois strictement plus grand que n, mais a priori indéterminé et potentiellement infini. On détaille en annexe B deux comportements différents obtenus dans ce cas, selon la condition de sortie de la boucle while (condition ligne 3 de type JNE, ou de type JEQ - cf B). 8

9 ranck De Goër 1 while: 2 [...] ; test de la condition de boucle 3 JCC endwhile ; sortie de boucle 4 5 [...] ; instructions 6 7 BRA while ; saut au debut de la boucle 8 9 endwhile: 10 [...] igure 6 Exemple de boucle while en assembleur La seconde attaque décrite (ligne 3) ne modifie pas la structure du graphe de flot (mais seulement son parcours lors de l exécution), elle ne sera donc pas retenue pour la suite. En revanche, la première (ligne 7) laisse la possibilité de sortir de la boucle sans retester la condition. Cela amène donc à la modification du graphe de flot comme illustré figure 7 (la ligne ajoutée est en ligne pointillée). entry entry while: while do endwhile do endwhile return return CG d'une structure while CG d'une structure while {NOP} igure 7 Exemple de modification d un CG par un NOP sur une structure while 3.2 Structure if elsif else La compilation d une structure de type if elsif else peut être faite de plusieurs façons différentes. On se propose d en traiter deux, qui sont les plus courantes. On notera que les deux versions sont identiquement vulnérables aux attaques JUMP NOP. Schéma de compilation n o 1. Au début de chaque bloc, la condition d exécution du bloc est testée. Si elle n est pas vérifiée, l exécution saute au bloc suivant. Ce schéma de compilation est illustré par la figure 8. Ici, l attaquant peut obtenir deux types de résultat en changeant un saut en NOP : 9

10 ranck De Goër 1 if: 2 [...] ; est de la condition 1 3 JNE elsif ; Si la condition n est pas verifiee, on saute au second bloc 4 5 [...] ; Instructions du if 6 BRA endif ; sortie de la structure 7 elsif: 8 [...] ; est de la condition 2 9 JNE else ; Si la condition n est pas verifiee, on saute au bloc else [...] ; Instructions du elsif 12 BRA endif ; sortie de la structure 13 else: 14 [...] ; Instructions du else 15 endif: 16 [...] igure 8 Exemple de structure if elsif else en assembleur Lignes 3,9 : une attaque sur l une de ces deux lignes a pour effet de forcer (partiellement) l évaluation de la condition. À la ligne 3 par exemple, on empêche quoi qu il arrive d exécuter le bloc if. Ce type d attaque n est pas l objet de cette étude, puisqu elle ne modifie pas le graphe de flot mais constitue une inversion partielle de test (se référer à [2] pour les inversions de test) Lignes 6,12 : si l un de ces branchements est remplacé par NOP, cela permet l exécution de deux blocs d instructions consécutifs : on oblige potentiellement l exécution du bloc suivant (de manière certaine si le bloc suivant est le bloc else, sous réserve de l évaluation de la condition suivante sinon) Schéma de compilation n o 2. Les tests sont effectués dès le début, et l exécution saute directement au bloc à exécuter 8. Ce schéma est illustré par la figure 9. De même que précédemment, une attaque sur un des sauts suivant l évaluation d une condition revient à forcer partiellement le test, et ne modifie pas le flot de contrôle. En revanche, une attaque sur un saut BRA endif force, de façon inconditionnelle cette fois-ci (à l inverse du cas 1), l exécution de deux blocs consécutifs. Nous venons de voir qu il est possible, grâce à une injection de NOP, d exécuter deux blocs consécutifs 9. La figure 10 illustre l impact d une telle attaque sur le CG. 3.3 Retours de fonction Au niveau C, les retours de fonction ne paraissent pas constituer une cible pour les attaques NOP. Cependant, si nous analysons au niveau assembleur (code assembleur généré par gcc fourni figure 11), nous pouvons constater que l instruction return -1 en C est traduite en plusieurs instructions assembleur, et se fait en plusieurs étapes : 1. Chargement de la valeur de retour (-1 soit 0xffff) dans le registre ax 2. jmp à la fin de la fonction 3. récupération de l adresse de retour depuis la pile vers bp 8. Cette méthode, notamment utilisée par le compilateur Deca de l équipe GL-24, présente l avantage de n effectuer qu un unique saut pour atteindre le bloc d instructions à exécuter, quel qu il soit. 9. Comprendre par consécutif : consécutif dans le code binaire. L ordre des blocs dépend du compilateur. 10

11 ranck De Goër 1 tests: 2 [...] ; est de la condition 1 3 JEQ if ; Si la condition est verifiee, on saute au bloc if 4 [...] ; est de la condition 2 5 JEQ elsif ; Si la condition est verifiee, on saute au bloc elsif 6 BRA else ; Sinon saut au bloc else 7 if: 8 [...] ; Instructions du if 9 BRA endif ; sortie de la structure 10 elsif: 11 [...] ; Instructions du elsif 12 BRA endif ; sortie de la structure 13 else: 14 [...] ; Instructions du else 15 endif: 16 [...] igure 9 Autre schéma de structure if elsif else en assembleur 4. ret (correspond à un saut à l adresse contenue dans bp) Il est important de noter que si plusieurs instructions return apparaissent à différents endroits d une fonction au niveau C, elles correspondront toutes à un saut à l adresse de fin de fonction au niveau assembleur. Il est donc tout à fait possible de remplacer l instruction jmp short 0x4f7 par l instruction nop pour empêcher le retour de fonction, et prolonger l exécution. Au niveau du CG, cela correspond à ajouter un arc comme illustré figure 12. Dans la section suivante, nous présentons notre proposition d implémentation pour traiter avec l approche Lazart des attaques JUMP NOP décrites précédemment. 4 Implémentation et résultats 4.1 Noppy Noppy est un outil que nous avons développé. Il permet, à partir d un CG, de rajouter l ensemble des chemins possibles par une injection de NOP. Noppy s appuie sur le travail réalisé en section 3 pour rajouter des chemins sur les structures conditionnelles (uniquement if else à ce jour), en prenant comme hypothèse de schéma de compilation celui utilisé en section 3.2 (c est-à-dire que le bloc if se trouve avant le bloc else dans le code binaire). À titre d exemple, Noppy transforme le CG de gauche de la figure 10 en le CG de droite Inclusion dans l approche Lazart Il est important de rappeler que Noppy a pour objectif d enrichir l approche Lazart décrite section 2.2, et illustrée figure 2. En effet, l ajout des chemins correspondant aux NOP dans un CG ne devient intéressant que si l on utilise ce nouveau CG pour déterminer des attaques possibles. Noppy s insère donc dans l approche Lazart. L intervention de Noppy se fait avant la coloration du graphe de flot et la génération de mutants - cf figure 13. Avant de colorier le graphe, les chemins correspondant à l attaque de type JUMP NOP sont ajoutés. Pour l outil de coloration, les noeuds modifiés (ceux avec un arc sortant ajouté par Noppy) sont vus comme des noeuds de test, sur lesquels il est possible de forcer le résultat (suivant le modèle de l approche, à savoir les inversions de test). Noppy conserve une trace des arcs qu il a ajoutés (sous la forme de couples (N1, N2)), pour la fournir ensuite à l outil de 11

12 ranck De Goër if: if: inst: elsif: inst: elsif: int: else: int: else: int: int: return: return: CG d'une structure if elsif else CG d'une structure if elsif else {NOP} igure 10 Exemple de modification du CG par attaque NOP dans une structure if elsif else E4 B8 mov ax,0xffff E7 db 0xff E8 db 0xff E9 EB0C jmp short 0x4f [...] D pop bp C3 ret igure 11 Exemple de code assembleur correspondant à un retour de fonction généré par gcc génération des mutants. Ce dernier, pour chaque noeud à muter, va d abord vérifier s il est le premier noeud d un des couples fournis par Noppy. Si c est le cas, la mutation est effectuée comme décrit dans la figure 14. Sinon, la génération de mutants est la même que celle décrite en section L ensemble de la suite de l approche est conservée, à savoir la génération des mutants et la couverture symbolique des chemins (via Klee). De cette manière, il est désormais possible de déterminer le nombre d attaques minimum nécessaire pour atteindre un noeud ciblé en considérant les NOP. Un exemple est développé section Algorithme de base d ajout d arcs En premier lieu, nous décrivons l algorithme de rajout de chemins dans un CG qui correspondent à une attaque par NOP sur une structure if elsif else : G = (V,E): graphe de flot Pour tout N in V tel que N a au moins deux fils faire: /* raitement de deux fils consécutifs */ Pour i allant de 1 à (N.nombreDeils() - 1) faire : 12

13 ranck De Goër entry: entry: bb1 bb1 return -1 while return -1 while bb2 return 0 bb2 return 0 bb5 bb5 return return CG d'une fonction avec return CG d'une fonction avec return {NOP} igure 12 Exemple de mutation de CG d une fonction contenant un retour appli.ll CG Noppy coloring mutation points mutant generation appli.ll attack objectives mutant.ll symbolic test case generator attack paths robustness "proof" inconclusive igure 13 Inclusion de Noppy dans l approche Lazart /* Détermination du point de conjonction */ PointDeRencontre = rouverpointderencontre(n.fils[i], N.fils[i+1]); si (PointDeRencontre == N) : /* Si le point de rencontre est le point de disjonction alors on est sur une structure de boucle */ N1 = NoeudPere(N.fils[i], N); N2 = N.fils[i+1]; /* On prend le dernier noeud du premier bloc */ N1 = PointDeRencontre.pereGauche(); /* Le premier noeud du second bloc */ N2 = N.fils[i+1]; /* Et on les relie */ E.ajouterArc(N1,N2); fin faire fin faire L idée de l algorithme est très simple : après chaque disjonction sur le CG (e.g. if else ou encore while endwhile), il faut ajouter un chemin entre la fin du premier bloc et le début du 13

14 ranck De Goër entry if else endif return CG d'une structure if else 1 /* Entry */ 2 if (...) { 3 inst; 4 } else { 5 inst; 6 } 7 return; (1a) CG du code initial (1b) Code initial entry: bb: bb1: bb2: return: CG d'une structure if else mutée (NOP) 1 bool nop_attack; 2 /* Entry */ 3 if (...) { 4 inst; 5 if (nop_attack) { 6 /* if attack is performed */ 7 /* incrementation of nb of faults */ 8 fault++; 9 /* execution of else */ 10 goto elselabel; 11 } 12 } else { 13 elselabel: 14 inst; 15 } (2a) CG du code muté (2b) Code muté : attaque systématique igure 14 Illustration de la génération de mutants pour un NOP second (comme détaillé en section 3). Spécification des fonctions utilisées : rouverpointderencontre(n1, N2) : retourne le premier noeud commun aux fils de N1 et N2 (requiert : un tel noeud existe). Ici, c est le cas puisque N1 et N2 opnt au moins le noeud return comme fils commun. NoeudPere(N1, N2) : retourne le premier noeud N parmi les fils de N1 tel que N2 soit un fils de N ; c est à dire le père de N2 qui soit un descendant de N1. ajouterarc(n1,n2) : ajoute un arc orienté allant du noeud N1 à N2 4.2 Sur un exemple : verify Détaillons la démarche Lazart dotée de Noppy sur l exemple présenté en section 2. Le code C est rappelé igure 15. L objectif de cet exemple est de montrer que la prise en compte de NOP amène à la détection d attaques qui ne sont pas réalisables si l on ne prend en compte que les inversions de test. 14

15 ranck De Goër Mutation et coloration du CG La première étape est la génération du graphe de flot (la figure 16 partie gauche). Ensuite, Noppy se charge de rajouter les arcs correspondant aux NOP possibles. La mutation du graphe de flot est illustrée figure 16 (partie droite). La figure 17 présente la coloration de deux graphes de flot guidée par l objectif d atteindre le noeud SUCCESS : à gauche la coloration du CG non muté par Noppy, à gauche celle du CG muté par Noppy. (Rappel des codes de couleur fournis section : [vert] Noeud amenant de façon certaine à l objectif [jaune orange] Noeud pouvant conduire ou non à l objectif, selon le résultat de tests [rouge] Noeud ne pouvant plus amener à l objectif.) Note : la flèche allant du noeud AILURE au noeud bb7 correspond au saut à la fin (unique) de la fonction dans le code binaire, à l endroit de l instruction de retour. On s aperçoit ici que la coloration n est pas la même selon si l on considère les NOP ou pas. Dans la version non mutée, les noeuds AILURE sont rouges par exemple, alors qu ils sont orange dans la version mutée. En effet, si elles sont prises en compte, les attaques NOP permettent d atteindre le noeud SUCCESS après avoir atteint un noeud AILURE, en remplaçant le saut à la fin de la fonction par un NOP Production de codes mutants et analyse dynamique sur le CG modifié La figure 15(b) fournit le code du mutant généré à partir du CG modifié par Noppy (le mutant est fourni en C pour être plus lisible, mais il est en réalité produit au format llvm). Dans ce mutant n apparaissent que les mutations correspondant à des NOP. Les inversions de test ne sont pas montrées. Nous donnons en annexe C le code C du driver de test. Nous pouvons reconnaître les trois NOP possibles dans les trois lignes klee_make_symbolic(&activnopi, sizeof(int), "activnopi");. Voici les attaques trouvées par Klee en au plus deux fautes injectées : Attaque 1 : Un seul passage dans la boucle : 1. NOP sur la sortie du noeud AILURE suivant bb2 (buffer[i]!= pin[i]) 2. NOP sur la sortie du noeud bb4 pour quitter la boucle immédiatement otal : 2 fautes Attaque 2 : Un seul passage dans la boucle : 1. Inversion de test sur bb2 pour aller vers bb4 2. NOP sur la sortie du noeud bb4 pour sortir immédiatement otal : 2 fautes Attaque 3 : Aucun passage dans la boucle : 1. Inversion du test d entrée de boucle sur bb5 pour ne pas l exécuter et sortir vers SUCCESS otal : 1 faute L attaque 3 ne fait pas intervenir d injection de NOP, elle est donc contenue dans l approche Lazart initiale (celle qui ne prend en compte que les inversions de test). L attaque 1 fait intervenir deux attaques de type NOP, mais ces deux injections de NOP sont équivalentes à l inversion des tests aux lignes 14 puis 12 (au second passage dans la boucle). L attaque 2, quant à elle, est 15

16 ranck De Goër intéressante, car elle combine les injections de NOP et les inversions de test. Il est à noter que les préconditions de l analyseur choisies dans le cadre de ces tests imposent que tous les chiffres du code pin saisi soient erronés. Avec ces conditions de test, on trouve donc une nouvelle attaque qui lie les inversions de test et les injections de NOP que l on n a pas en ne traitant que les inversions de test. D autre part, on peut modifier les préconditions. Par exemple, si l on considère que l attaquant peut connaître le premier chiffre du code PIN, alors il est possible de passer l authentification avec succès en forçant la sortie de boucle à la fin de la comparaison : bb4 SUCCESS). Comme l attaquant dispose de trois tentatives pour trouver le code Pin, la probabilité de succès avec cette attaque devient 0.3 * 0.20 = 0.06 (probabilité de trouver le premier chiffre en trois essais multiplié par la probabilité de réussite de l attaque), ce qui est bien mieux que la probabilité de (trois essais pour PIN possibles) pour un attaquant dépourvu de laser. 16

17 ranck De Goër int verify(char buffer[], int ofs, int len) { int i; /* No comparison if PIN is blocked */ if(triesleft < 0) { // AILURE if (nop_attack_1) { fault++; goto bb1; } return EXI_AILURE; } 1 int verify(char buffer[], int ofs, int len) { 2 int i; 3 /* No comparison if PIN is blocked */ 4 if(triesleft < 0) 5 // AILURE 6 return EXI_AILURE; 7 8 // bb /* Main Comparison */ 11 // bb5 12 for (i = 0; i < len; i++) { 13 // bb2 14 if(buffer[ofs + i]!= pin[i]) { 15 triesleft--; 16 authenticated = 0; 17 // AILURE 18 return EXI_AILURE; 19 } 20 // bb4 21 } /* Comparison is successful */ 24 // SUCCESS 25 triesleft = maxries; 26 authenticated = 1; 27 return EXI_SUCCESS; 28 } } // bb1 bb1: /* Main Comparison */ // bb5 for (i = 0; i < len; i++) { // bb2 if(buffer[ofs + i]!= pin[i]) { triesleft--; authenticated = 0; // AILURE if (nop_attack_2) { fault++; goto bb4; } return EXI_AILURE; } // bb4 if (nop_attack_3[i]) { fault++; goto SUCCESS; } } /* Comparison is successful */ // SUCCESS SUCCESS: triesleft = maxries; authenticated = 1; return EXI_SUCCESS; (a) Code initial de verify (b) Mutant correspondant aux injections de NOP igure 15 Code de vérification du code PIN et mutation 17

18 ranck De Goër entry: entry: triesleft < 0? triesleft < 0? bb1 bb1 AILURE bb5: AILURE bb5: bb2: SUCCESS bb2: SUCCESS AILURE bb4: AILURE bb4: bb7 bb7 return return CG for 'verify' function CG for 'verify' function after Noppy igure 16 Graphe de flot de verify muté par Noppy entry: entry: triesleft < 0? triesleft < 0? bb1 bb1 AILURE bb5: AILURE bb5: bb2: SUCCESS bb2: SUCCESS AILURE bb4: AILURE bb4: bb7 bb7 return: return: CG de la fonction 'verify' colorié (objectif : atteindre SUCCESS) CG for 'verify' function - Coloration after Noppy igure 17 Graphe de flot de verify 18

19 ranck De Goër Conclusion Nous avons dans ce papier tenté de fournir un apport à la détection automatique de vulnérabilités de code aux attaques par injection de faute. Nous nous sommes intéressés spécialement aux attaques consistant à remplacer un JUMP par un NOP. Après une étude détaillée des impacts de ce type d attaque sur le CG, nous avons proposé une implémentation permettant d inclure ces attaques à l approche Lazart développée à Verimag. L algorithme proposé permet de traiter les structures de type if elsif else ainsi que les structures while, à supposer que l on sache détecter les boucles dans un programme (c est là un problème classique de compilation et d optimisation de code que nous n avons pas traité). L inclusion dans Lazart se fait bien, puisque nous avons détecté des attaques faisant intervenir à la fois des inversions de test et des injections de NOP. L implémentation détaillée dans ce papier ne prend cependant pas en compte les appels de fonctions mentionnés en section 3, ni les structures particulières que sont les switch. Il serait également intéressant de pouvoir moduler l implémentation en fonction du schéma de compilation effectif utilisé. Enfin, dans la section 4.2, nous nous essayons à des comparaisons entre les différentes attaques trouvées ("L attaque 1 fait intervenir deux attaques de type NOP, mais ces deux injections de NOP sont équivalentes à l inversion des tests aux lignes 14 puis 12 (au second passage dans la boucle)."). Cependant, la comparaison entre deux attaques reste à formaliser (doit-on considérer les instructions exécutées? Le parcours dans le CG? Le résultat en sortie?). La majorité du travail présenté dans ce papier a été effectué dans les locaux de Verimag, en collaboration avec Marie-Laure Potet. Le contenu de ce papier est étroitement lié au travail de Maxime Puys (ER - UJ), qui développe l automatisation de la génération des mutants en sortie de la coloration. Par ailleurs, ce papier s appuie sur les travaux de Jonathan Vivien, à qui nous devons le module de coloration du CG [6]. Enfin, de précieuses informations sur la pratique réelle des attaques laser ont été fournies par Jessy Clediere, du CESI. 19

20 ranck De Goër Références [1] H. Bar-El, H. Choukri, D. Naccache, M. unstall et C. Whelan, «he sorcerer s apprentice guide to fault attacks», Proceedings of the IEEE, vol. 94, no. 2, p , [2] M.-L. Potet, L. Mounier et J. Vivien, «A static approach for evaluating the robustness of secured codes against fault injection by test inverting», [3] A. Pellegrini, V. Bertacco et. Austin, «ault-based attack of rsa authentication», in Proceedings of the Conference on Design, Automation and est in Europe, p , European Design and Automation Association, [4] A. Barenghi, L. Breveglieri, I. Koren, G. Pelosi et. Regazzoni, «Countermeasures against fault attacks on software implemented aes : effectiveness and cost», in Proceedings of the 5th Workshop on Embedded Systems Security, p. 7, ACM, [5] M. Christofi, Preuves de sécurité outillées d implémentations cryptographiques. hèse doctorat, Université de Versailles Saint-Quentin-En-Yvelines, [6] J. Vivien, «Evaluation of code vulnerabilities against fault attacks on smartcards», [7] X. Kauffmann-ourkestansky, Analyses sécuritaires de code de carte à puce sous attaques physiques simulées. hèse doctorat, Université d Orléans, [8] Application of Attack Potential to Smartcards. Joint Interpretation Library, [9] P. Berthome, K. Heydemann, X. Kauffmann-ourkestansky et J.-. Lalande, «High level model of control flow attacks for smart card functional security», in Availability, Reliability and Security (ARES), 2012 Seventh International Conference on, p , IEEE,

21 ranck De Goër A Efficacité des détections au niveau source et au niveau binaire Nous nous proposons ici de résumer les résultats du papier de Berthomé, Heydemann, Kauffman- ourkestansky et Lalande [9], comparant l efficacité des analyses de vulnérabilités aux injections de faute au niveau binaire et au niveau source. Leur expérimentation a été effectuée sur le logiciel bzip2. À partir d un fichier source d environ 500K, a été produit un fichier compressé de référence avec bzip2. Puis ce même fichier a été compressé avec un bzip2 sur lequel a été simulé une attaque laser, soit au niveau source, soit au niveau ASM. Le tableau 2 récapitule leurs résultats. La deuxième ligne donne le nombre total d attaques effectuées par chacun des deux modèles. La ligne "Nb of Bads" donne le nombre de simulations aboutissant à une compression (pas d erreur à l exécution) qui diffère de la compression de référence. Parmi ces compressions corrompues, la ligne "Nb of Empty file" donne le nombre de fichiers vides et la ligne "Uniq Bads" le nombre de fichiers compressés différents obtenu. Statistics ASM C Code Size Nb of attacks Simulation time 2d18h 8h Nb of Bads Nb of Enmpty file Uniq Bads ASM Coverage 100% 21% able 2 Statistics for simulated attacks on bzip2 [Source : [9]] Parmi les 1245 fichiers compressés trouvés par l analyse au niveau C, seulement 503 sont des attaques trouvées également au niveau ASM. Cela signifie d une part que l analyse au niveau source n a trouvé que 21% des attaques trouvées par une analyse au niveau binaire, mais d autre part que cette analyse est plus efficace, puisqu elle dure 8 fois moins de temps qu une analyse complète du binaire. Il est donc intéressant de travailler au niveau source en terme d efficacité, mais il faut encore améliorer cette approche afin de la rendre le plus exhaustive possible. B Deux conséquences differentes à une attaque de type NOP sur une boucle while Voici deux cas de boucles while donnant des comportements différents si soumis à une unique attaque sur le test de condition : Cas particulier 1. Une attaque de type JUMP NOP à la ligne 3 amène la boucle à s exécuter une fois de plus que prévu (donc 11 fois). Cas particulier 2. Dans ce cas-ci, la même attaque à la ligne 3 amène la boucle à s exécuter infiniement (ou au moins le nombre de fois qu il faut pour que i fasse un tour de l ensemble des INEGER). 21

22 ranck De Goër 1 SORE $1, i ; initialisation de i 2 while: 3 CMP i, 10 ; comparaison du compteur 4 JGE endwhile ; sortie de boucle 5 [...] ; instructions 6 ADD $1, i ; incrementation du compteur 7 BRA while ; saut au debut de la boucle 8 9 endwhile: 10 [...] igure 18 Cas particulier [1] 1 SORE $1, i ; initialisation de i 2 while: 3 CMP i, 10 ; comparaison du compteur 4 JNE endwhile ; sortie de boucle <- Difference avec le premier exemple 5 [...] ; instructions 6 ADD $1, i ; incrementation du compteur 7 BRA while ; saut au debut de la boucle 8 9 endwhile: 10 [...] igure 19 Cas particulier [2] C Mutant de verify pour analyse dynamique 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define SIZE_O_PIN 4 5 #define MAX_RIES typedef unsigned char BYE; 8 BYE triesleft = MAX_RIES; 9 BYE authenticated; 10 BYE pin[size_o_pin] = {1, 2, 3, 4} ; int fault; 13 int activ1; 14 int activ2; 15 int activ3; 16 int activ4; 17 int activ5; 18 int activ6; 19 int activnop1; 20 int activnop2; 21 int activnop3; void verify_precond(char buffer[size_o_pin]) { 24 int i; klee_make_symbolic(&activ1, sizeof(int), "activ1"); 22

23 ranck De Goër 27 klee_make_symbolic(&activ2, sizeof(int), "activ2"); 28 klee_make_symbolic(&activ3, sizeof(int), "activ3"); 29 klee_make_symbolic(&activ4, sizeof(int), "activ4"); 30 klee_make_symbolic(&activ5, sizeof(int), "activ5"); 31 klee_make_symbolic(&activ6, sizeof(int), "activ6"); klee_make_symbolic(&activnop1, sizeof(int), "activnop1"); 34 klee_make_symbolic(&activnop2, sizeof(int), "activnop2"); 35 klee_make_symbolic(&activnop3, sizeof(int), "activnop3"); klee_make_symbolic(buffer, sizeof(char)*size_o_pin, "buffer"); 38 for (i=0 ; i<size_o_pin ; i++) { 39 klee_assume(buffer[i]!= pin[i]); 40 } 41 } void verify_postcond() { 44 klee_assume(fault <= 2); 45 } int verify(bye buffer[size_o_pin]) { 48 int i = 0; if (triesleft == 0) { 51 return 0; 52 } for(i=0 ; i<4 ; i++) { 55 if(buffer[i]!= pin[i]) { 56 triesleft--; 57 authenticated = 0; 58 return 0; 59 } 60 } triesleft = MAX_RIES; 63 authenticated = 1; return EXI_SUCCESS; 66 } int main(int argc, char *argv[]) { 70 BYE buffer[size_o_pin]; verify_precond(buffer); 73 verify(buffer); 74 verify_postcond(); return EXI_SUCCESS; 77 } - 23

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée

Plus en détail

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION 145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

Évaluation de l injection de code malicieux dans une Java Card

Évaluation de l injection de code malicieux dans une Java Card Évaluation de l injection de code malicieux dans une Java Card Julien Iguchi-Cartigny, Jean-Louis Lanet {julien.cartigny,jean-louis.lanet}(@)unilim.fr XLIM/DMI/SSD 83 rue d Isle 87000 Limoges Résumé Nous

Plus en détail

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Algorithme. Table des matières

Algorithme. Table des matières 1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation

Plus en détail

Formula Negator, Outil de négation de formule.

Formula Negator, Outil de négation de formule. Formula Negator, Outil de négation de formule. Aymerick Savary 1,2, Mathieu Lassale 1,2, Jean-Louis Lanet 1 et Marc Frappier 2 1 Université de Limoges 2 Université de Sherbrooke Résumé. Cet article présente

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

Qualité du logiciel: Méthodes de test

Qualité du logiciel: Méthodes de test Qualité du logiciel: Méthodes de test Matthieu Amiguet 2004 2005 Analyse statique de code Analyse statique de code Étudier le programme source sans exécution Généralement réalisée avant les tests d exécution

Plus en détail

Conception de circuits numériques et architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011 Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr Université de Provence 9 février 2011 Arnaud Labourel (Université de Provence) Exclusion Mutuelle 9 février 2011 1 / 53 Contexte Epistémologique

Plus en détail

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

Plus en détail

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être

Plus en détail

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96 Assembleur i8086 Philippe Preux IUT Informatique du Littoral Année universitaire 95 96 1 Avertissement Ce document décrit le langage d assemblage étudié et utilisé dans le cadre des TP d architecture.

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Programmation C++ (débutant)/instructions for, while et do...while

Programmation C++ (débutant)/instructions for, while et do...while Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

GPA770 Microélectronique appliquée Exercices série A

GPA770 Microélectronique appliquée Exercices série A GPA770 Microélectronique appliquée Exercices série A 1. Effectuez les calculs suivants sur des nombres binaires en complément à avec une représentation de 8 bits. Est-ce qu il y a débordement en complément

Plus en détail

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

Temps Réel. Jérôme Pouiller <j.pouiller@sysmic.org> Septembre 2011

Temps Réel. Jérôme Pouiller <j.pouiller@sysmic.org> Septembre 2011 Temps Réel Jérôme Pouiller Septembre 2011 Sommaire Problèmatique Le monotâche Le multitâches L ordonnanement Le partage de ressources Problèmatiques des OS temps réels J. Pouiller

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

Plus en détail

Evaluation, Certification Axes de R&D en protection

Evaluation, Certification Axes de R&D en protection 2009 Evaluation, Certification Axes de R&D en protection Dr CEA/LETI Alain.merle@cea.fr 1 Evaluation, Certification, Axes de R&D en protection Evaluation / Certification Le Schéma Français de Certification

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Cours d Algorithmique et de Langage C 2005 - v 3.0

Cours d Algorithmique et de Langage C 2005 - v 3.0 Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris

Plus en détail

La mémoire. Un ordinateur. L'octet. Le bit

La mémoire. Un ordinateur. L'octet. Le bit Introduction à l informatique et à la programmation Un ordinateur Un ordinateur est une machine à calculer composée de : un processeur (ou unité centrale) qui effectue les calculs une mémoire qui conserve

Plus en détail

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...

Plus en détail

IRL : Simulation distribuée pour les systèmes embarqués

IRL : Simulation distribuée pour les systèmes embarqués IRL : Simulation distribuée pour les systèmes embarqués Yassine El Khadiri, 2 ème année Ensimag, Grenoble INP Matthieu Moy, Verimag Denis Becker, Verimag 19 mai 2015 1 Table des matières 1 MPI et la sérialisation

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Note technique. Recommandations de sécurité relatives aux mots de passe

Note technique. Recommandations de sécurité relatives aux mots de passe P R E M I E R M I N I S T R E Secrétariat général Paris, le 5 juin 2012 de la défense et de la sécurité nationale N o DAT-NT-001/ANSSI/SDE/NP Agence nationale de la sécurité Nombre de pages du document

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

1 Recherche en table par balayage

1 Recherche en table par balayage 1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément

Plus en détail

REALISATION d'un. ORDONNANCEUR à ECHEANCES

REALISATION d'un. ORDONNANCEUR à ECHEANCES REALISATION d'un ORDONNANCEUR à ECHEANCES I- PRÉSENTATION... 3 II. DESCRIPTION DU NOYAU ORIGINEL... 4 II.1- ARCHITECTURE... 4 II.2 - SERVICES... 4 III. IMPLÉMENTATION DE L'ORDONNANCEUR À ÉCHÉANCES... 6

Plus en détail

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

Organigramme / Algorigramme Dossier élève 1 SI

Organigramme / Algorigramme Dossier élève 1 SI Organigramme / Algorigramme Dossier élève 1 SI CI 10, I11 ; CI 11, I10 C24 Algorithmique 8 février 2009 (13:47) 1. Introduction Un organigramme (ou algorigramme, lorsqu il est plus particulièrement appliqué

Plus en détail

ÉPREUVE COMMUNE DE TIPE 2008 - Partie D

ÉPREUVE COMMUNE DE TIPE 2008 - Partie D ÉPREUVE COMMUNE DE TIPE 2008 - Partie D TITRE : Les Fonctions de Hachage Temps de préparation :.. 2 h 15 minutes Temps de présentation devant le jury :.10 minutes Entretien avec le jury :..10 minutes GUIDE

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice

Plus en détail

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques... Désobfuscation automatique de binaires Et autres idyles bucoliques... Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,

Plus en détail

Analyse de sécurité de logiciels système par typage statique

Analyse de sécurité de logiciels système par typage statique Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction

Plus en détail

Guide plateforme FOAD ESJ Lille

Guide plateforme FOAD ESJ Lille Guide plateforme FOAD ESJ Lille v. 1.2 «étudiants» septembre 2014 Réalisé par Maxime Duthoit Ingénieur pédagogique multimédia à l ESJ Lille Sommaire Introduction... 1 1. Accueil et connexion... 2 2. Accueil

Plus en détail

SUPPORT DE COURS. Langage C

SUPPORT DE COURS. Langage C Dpt Informatique 2010-2011 SUPPORT DE COURS Langage C Semestre 1 par : «CaDePe» Marie-Françoise Canut Marianne de Michiel André Péninou Table des Matières 1 Généralités...8 1.1 Introduction aux langages

Plus en détail

Rappels d architecture

Rappels d architecture Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée

Plus en détail

Transmission d informations sur le réseau électrique

Transmission d informations sur le réseau électrique Transmission d informations sur le réseau électrique Introduction Remarques Toutes les questions en italique devront être préparées par écrit avant la séance du TP. Les préparations seront ramassées en

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Compression de Données - Algorithme de Huffman Document de Conception

Compression de Données - Algorithme de Huffman Document de Conception ROLLET Samuel SALLE Jennifer Compression de Données - Algorithme de Huffman Document de Conception Projet d'algorithmique et Structure des Données 1 SOMMAIRE 1. Domaine d application....4 1.1 Objectifs

Plus en détail

Ordinateurs, Structure et Applications

Ordinateurs, Structure et Applications Ordinateurs, Structure et Applications Cours 10, Les interruptions Etienne Tremblay Université Laval, Hiver 2012 Cours 10, p.1 Les interruptions du 8086 Une interruption interrompt l exécution séquentielle

Plus en détail

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués International Journal of Engineering Research and Development e-issn: 2278-067X, p-issn: 2278-800X, www.ijerd.com Volume 7, Issue 5 (June 2013), PP.99-103 Solution A La Gestion Des Objets Java Pour Des

Plus en détail

Introduction à la Programmation Parallèle: MPI

Introduction à la Programmation Parallèle: MPI Introduction à la Programmation Parallèle: MPI Frédéric Gava et Gaétan Hains L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours du M2 SSI option PSSR Plan 1 Modèle de programmation 2 3 4

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Le prototype de la fonction main()

Le prototype de la fonction main() Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 7 17 décembre 2012 Archi 1/1 Fonctions, suite et fin Archi 2/1 Rappel Forme générale d un sous-programme (fonction) : etiquette sousprogramme: push ebp ; empile la valeur

Plus en détail

Encryptions, compression et partitionnement des données

Encryptions, compression et partitionnement des données Encryptions, compression et partitionnement des données Version 1.0 Grégory CASANOVA 2 Compression, encryption et partitionnement des données Sommaire 1 Introduction... 3 2 Encryption transparente des

Plus en détail

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun> 94 Programmation en OCaml 5.4.8. Concaténation de deux listes Définissons maintenant la fonction concat qui met bout à bout deux listes. Ainsi, si l1 et l2 sont deux listes quelconques, concat l1 l2 constitue

Plus en détail

ACTIVITÉ DE PROGRAMMATION

ACTIVITÉ DE PROGRAMMATION ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,

Plus en détail

Exercices de dénombrement

Exercices de dénombrement Exercices de dénombrement Exercice En turbo Pascal, un entier relatif (type integer) est codé sur 6 bits. Cela signifie que l'on réserve 6 cases mémoires contenant des "0" ou des "" pour écrire un entier.

Plus en détail

Structure d un programme

Structure d un programme Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé

Plus en détail

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut

Plus en détail

TUTORIEL Qualit Eval. Introduction :

TUTORIEL Qualit Eval. Introduction : TUTORIEL Qualit Eval Introduction : Qualit Eval est à la fois un logiciel et un référentiel d évaluation de la qualité des prestations en établissements pour Personnes Agées. Notre outil a été spécifiquement

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN http://www.oklabs.net

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN http://www.oklabs.net Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN http://www.oklabs.net : Champ Encodé SKWRITTEN() : Champ Variable défini Précédemment & définissant l état des champs à suivre ECT

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier Cours de C Petits secrets du C & programmation avancée Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1 Affectations étendues a+=expression a=a+expression

Plus en détail

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables

Plus en détail

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

Plus en détail

Gestion mémoire et Représentation intermédiaire

Gestion mémoire et Représentation intermédiaire Gestion mémoire et Représentation intermédiaire Pablo de Oliveira March 23, 2015 I Gestion Memoire Variables locales Les variables locales sont stockées: Soit dans un registre,

Plus en détail