FR 3047585 A1 20170811 FR 1651001 A 20160209 1 Procédé et dispositif de surveillance de l'execution d'un code programme. Des modes de mise en oeuvre et de réalisation de l'invention concernent la surveillance de l'exécution d'un code programme par un programme de surveillance, en particulier un programme de surveillance implémenté dans un processeur distinct du processeur exécutant le code programme à surveiller. Ils s'appliquent tout particulièrement à la surveillance de l'exécution des instructions de branchement, comme par exemple les instructions de saut (« Jump », selon la dénomination anglo-saxonne). Une instruction de branchement est une instruction qui lors du de l'exécution d'un code programme stocké dans une mémoire, fait passer la lecture du programme d'une première instruction à une deuxième instruction située dans un emplacement mémoire dont l'adresse ne suit pas directement l'adresse de la première instruction. Lors du déroulement du code programme, des erreurs d'exécution peuvent survenir, soit par le fait d'une erreur de stockage du code programme dans la mémoire ou d'une mauvaise lecture d'une des instructions du code programme, soit par le fait d'injection d'erreurs par un attaquant extérieur. On connait des moyens de surveillance de l'exécution d'un code programme, comme par exemple ceux décrits dans la demande de brevet internationale publiée sous le numéro « 2008 075166 Al » permettant de vérifier la bonne exécution des instructions de saut, et de générer un signal d'erreur dans le cas contraire. Cependant, dans cette demande, l'exécution des instructions et la surveillance de leur exécution sont contrôlées par la même unité centrale de traitement, ce qui implique une modification du logiciel de l'unité centrale afin d'y intégrer le code de surveillance. De plus, il est préférable que l'unité centrale de traitement ne se surveille pas elle-même. 3047585 2 Ainsi, selon un mode de mise en oeuvre, il est proposé un dispositif et un procédé de surveillance de l'exécution d'un code programme dans lequel le code de surveillance peut être exécuté par une unité de surveillance distincte de l'unité de traitement et 5 l'exécution du code de surveillance ne nécessite pas une gestion spécifique de l'accès à la mémoire stockant le code programme à surveiller. Selon un aspect, il est proposé un procédé de surveillance de l'exécution d'un code programme par un code programme de 10 surveillance dans lequel on stocke le code programme dans une mémoire comprenant des emplacements mémoires capables chacun de stocker au moins un mot d'instruction du code programme et ayant une capacité de stockage supérieure 15 à la taille des mots d'instruction du code programme, pour chaque emplacement mémoire comprenant au moins une instruction du code programme à surveiller, on stocke dans la partie libre de l'emplacement mémoire contenant ladite au moins une instruction à surveiller au 20 moins une partie d'une instruction de surveillance du code programme de surveillance, on extrait simultanément de la mémoire programme ladite au moins une instruction à surveiller et ladite au moins une partie de ladite instruction de surveillance, et 25 on exécute ladite au moins une instruction à surveiller et ladite instruction de surveillance. Ainsi, le code programme à surveiller et le code de surveillance sont stockés dans la même mémoire, avec les instructions de surveillance contenues au moins en partie dans les même mots 30 mémoires que ceux contenant les instructions à surveiller. On obtient donc une extraction synchronisée des instructions à surveiller et des instructions de surveillance et il devient alors par exemple possible de faire exécuter le code programme et le code de surveillance par deux unités de traitement différentes, sans recourir à un arbitrage spécifique 3047585 3 de l'accès à la mémoire. Cela permet d'une part de ne pas avoir à modifier le logiciel d'une unique unité de traitement, et d'autre part d'avoir une exécution synchrone du code programme et du code de surveillance. 5 L'instruction de surveillance peut avoir une taille supérieure à la taille de la partie libre. Dans ce cas, on peut stocker une première partie de l'instruction de surveillance dans la partie libre de l'emplacement mémoire contenant ladite au moins une instruction à surveiller, et stocker une deuxième partie de l' instruction de 10 surveillance dans la partie libre d'au moins un emplacement mémoire précédant l'emplacement mémoire contenant ladite au moins une instruction de code programme à surveiller. Selon un mode de mise en oeuvre, l'emplacement mémoire contenant ladite au moins une instruction à surveiller peut comporter 15 plusieurs mots d'instruction et on peut stocker dans la partie libre d'au moins un emplacement mémoire précédant l'emplacement mémoire contenant ladite au moins une instruction de code programme à surveiller, une information désignant ladite au moins une instruction à laquelle l'instruction de surveillance se rapporte. 20 On peut stocker dans un emplacement mémoire situé à une adresse ultérieure à celle de l'emplacement mémoire comprenant ladite au moins une instruction de code programme à surveiller, au moins une partie d'une autre instruction du code de surveillance, l'instruction à surveiller étant par exemple une instruction de branchement pointant 25 vers ledit emplacement mémoire suivant. Selon un autre aspect, il est proposé un dispositif de surveillance d'un code programme par un code programme de surveillance. Selon un caractéristique générale de cet aspect le dispositif 30 peut comprendre une mémoire comprenant des emplacements mémoires capables chacun de stocker au moins un mot d'instruction du code programme et ayant une capacité de stockage supérieure à la taille des mots d'instruction du code programme, chaque emplacement mémoire comportant une partie libre capable de stocker au moins une partie 3047585 4 d'une instruction de surveillance du code programme de surveillance, le dispositif pouvant comporter des moyens d'extraction simultanée de ladite au moins une instruction à surveiller et de ladite au moins une partie de ladite instruction de surveillance, et des moyens d'exécutions 5 simultanées de ladite instruction à surveiller et de ladite au moins une partie de l'instruction de surveillance. L'instruction de surveillance peut avoir une taille supérieure à la taille de la partie libre, et ladite partie libre de l'emplacement mémoire contenant ladite au moins une instruction à surveiller peut 10 être capable de recevoir une première partie de l'instruction de surveillance, et la partie libre d'un emplacement mémoire précédant l'emplacement mémoire contenant ladite au moins une instruction de code programme à surveiller peut être capable de contenir une première partie de l'instruction de surveillance, 15 Selon un mode de réalisation, l'emplacement mémoire contenant ladite au moins une instruction à surveiller peut comporter plusieurs mots d'instruction et la partie libre d'au moins un emplacement mémoire précédant l'emplacement mémoire contenant ladite au moins une instruction de code programme à surveiller 20 comprend une information désignant alors ladite au moins une instruction à laquelle l'instruction de surveillance se rapporte. Un emplacement mémoire situé à une adresse ultérieure à celle de l'emplacement mémoire comprenant ladite au moins une instruction de code programme à surveiller, peut être capable de contenir au 25 moins une partie d'une autre instruction du code de surveillance, l'instruction à surveiller étant une instruction de branchement pointant vers ledit emplacement mémoire suivant. D'autres avantages et caractéristiques de l' invention apparaitront à l'examen de la description détaillée de mode de mise en 30 oeuvre et de réalisation, nullement limitatifs, et des dessins annexés sur lesquels - Les figures 1 à 5 illustrent des modes de mise en oeuvre et de réalisation de l'invention 3047585 5 La figure 1 illustre un système de traitement informatique comportant une mémoire programme MEM, une unité centrale de traitement CPU, par exemple un processeur, une unité de surveillance AM, par exemple un autre processeur, et un compilateur CPL. 5 L'unité de surveillance AM comprend dans cet exemple deux registres R1 et R2, un compteur CPT apte à être initialisé à une valeur T et à se décrémenter au rythme d'un signal d'horloge, et un comparateur CMP configuré pour comparer les contenus des deux registres R1 et R2 à l'expiration de la durée T (lorsque la valeur de 10 compteur atteint 0). Cette durée T dépend notamment des architectures de pipelines des différents processeurs et est supérieure à la durée nécessaire au processeur CPU pour exécuter une instruction extraite de la mémoire MEM. La mémoire MEM est couplée à l'unité centrale de traitement 15 CPU et à l'unité de surveillance AM par l'intermédiaire d'un BUS de donnée 1. Par exemple, le BUS 1 peut être un BUS parallèle de trente-deux bits dont une première portion 11, par exemple de vingt-huit bits, est couplée à l'unité de traitement CPU, et une deuxième portion 12, ici de quatre bits, est couplée à l'unité de surveillance AM. 20 Classiquement, lors de la compilation d'un code source, le compilateur analyse la syntaxe du code source du programme et définit un code intermédiaire dans lequel il définit des instructions à surveiller, par exemple des instructions de saut d'adresses conditionnel (par exemple l'instruction « JRZ » en langage 25 assembleur) ou absolu (par exemple l'instruction « JMP » en langage assembleur), sans que ces exemples ne soient limitatifs. Ensuite, le code intermédiaire est converti en code programme exécutable. Le compilateur définit en parallèle les instructions du code de surveillance. 30 Ici, pour chaque définition d'une instruction de saut d'adresses, le compilateur définit des instructions de surveillance 4 de l'exécution du code programme. Le compilateur CPL est configuré pour associer à chaque instruction de code programme 3 à surveiller, au moins une partie 3047585 6 d'une instruction de surveillance 4, et pour regrouper l'instruction à surveiller 3 et ladite partie de l'instruction de surveillance 4 dans un mot mémoire MM destiné à être stocké dans un emplacement mémoire 2. 5 La taille du mot mémoire MM est donc supérieure à la taille d'une instruction de code programme à surveiller. Comme il sera vu plus en détail ci-après, pour chaque instruction à surveiller, par exemple une instruction de saut d'adresse conditionnel de type « JMP » ou absolu de type « JRZ », le 10 compilateur peut associer une instruction de type « WRITE R1 », correspondant à l'écriture d'une valeur de référence dans le registre Rl. Dans le cas d'une instruction de saut d'adresses conditionnel, le compilateur CPL définit alors à la suite de cette instruction une instruction de type CLEAR R1 correspondant à la réinitialisation du 15 registre R1, dans un mot mémoire destiné à être stocké dans un emplacement mémoire suivant directement l'emplacement mémoire comprenant l'instruction à surveiller. Si cette instruction possède une taille trop importante, le compilateur peut la séparer en deux parties, et placer l'une des parties 20 dans un autre mot mémoire destiné à être stocké par exemple dans l'emplacement mémoire précédent. De même, le compilateur connaissant l'adresse de l'emplacement mémoire pointé par l'instruction de saut d'adresse, définit pour l'adresse pointée une autre instruction de surveillance de 25 type WRITE R2 correspondant à l'écriture d'une valeur de référence dans le registre R2, qu'il va placer dans le mot mémoire destiné à être stocké à l'adresse pointée par l'instruction de saut. Le code programme et le code de surveillance sont ensuite stockés dans les emplacements mémoire de la mémoire programme 30 MEM. Chaque emplacement mémoire à donc une taille supérieure à la taille d'une instruction de surveillance. Dans la suite de la description, il sera décrit plus en détail un exemple de déroulement du programme de surveillance. 3047585 7 La mémoire MEM, comme illustré sur la figure 2, comporte des emplacements mémoire 2, chacun configuré pour stocker un mot mémoire comportant au moins un mot d'instruction 3 d'un code programme exécutable. 5 Ici, les emplacements mémoires ont une taille de trente-deux bits. Les mots d'instruction 3 ont une taille de vingt-huit bits, laissant ainsi une partie libre PL de quatre bits dans chaque emplacement mémoire. Cette partie libre PL est utilisée pour stocker, comme décrit ci- 10 avant, des instructions de surveillance 4 associées à des instructions à surveiller. Dans cet exemple, un premier emplacement mémoire 21 comprend un mot mémoire composé d'un premier mot d'instruction 31, correspondant à une instruction de saut d'adresses conditionnel, et 15 d'une première instruction de surveillance 41, se rapportant au premier mot d'instruction 31. La première instruction de surveillance 41 correspond ici à une écriture d'une valeur de référence dans le registre R1, par exemple l'écriture de la valeur un. 20 L'instruction de saut d'adresse 31 pointe vers un deuxième emplacement mémoire 22, comportant un mot mémoire composé d'un deuxième mot d'instruction 32, non surveillé, et une deuxième instruction de surveillance 42 se rapportant à l'instruction de saut 31. La deuxième instruction de surveillance 42 correspond ici à 25 une écriture de la valeur de référence dans le registre R2. Un troisième emplacement mémoire 23, dont l'adresse suit directement celle du premier emplacement mémoire 21, contient un mot mémoire comportant une troisième instruction de surveillance 43 correspondant à une remise à sa valeur initiale du registre R1 et 30 stockée dans la partie libre PL du troisième emplacement mémoire 23. La figure 3 illustre de manière schématique les différentes étapes d'un mode de mise en oeuvre de l'invention. 3047585 8 A l'étape El, on compile le code source et le code de surveillance comme décrit ci-avant et on stocke les mots mémoires ainsi obtenus dans les emplacements mémoires 2 de la mémoire MEM. Ainsi, chaque emplacement mémoire 2 comporte une 5 instruction du code programme, et les emplacements mémoire comportant des mots d'instruction à surveiller comporte en outre chacun une instruction du code de surveillance 4 stockée dans les parties non utilisées (ou parties libres PL) par les mots d'instruction 3 du code programme. 10 Ici, le stockage est fait de telle sorte qu'à la fin de l'étape El, la mémoire MEM se trouve dans la configuration décrite précédemment et illustrée sur la figure 2. On extrait ensuite (étape E2) le contenu du premier emplacement mémoire 21. 15 Il convient de noter que l'étape E2 ne suit pas forcément directement l'étape El. Ainsi, préalablement à l'étape E2, d'autre étapes qui correspondent à une exécution classique du code programme contenu dans d'autres emplacements mémoires 2 ont pu avoir lieu mais ne sont pas décrites à des fins de simplification. 20 Les vingt-huit premiers bits du premier emplacement mémoire 21, c'est-à-dire l'instruction de saut 31 sont extraits vers l'unité centrale de traitement via la première portion 11 du bus 1, et les quatre bits restants, qui correspondent au premier mot d'instruction de surveillance 41, sont extraits vers l'unité de surveillance via la 25 deuxième portion 12 du bus 1. Ainsi, les extractions du mot d'instruction 31 du code programme et de la première instruction de surveillance 41 se font simultanément et de façon synchronisée. De même (étape E3) l'exécution de l'instruction de code 30 programme 31 par l'unité centrale CPU et l'exécution de l'instruction de surveillance 41 par l'unité de surveillance AM sont faites en parallèle. Lors de l'exécution de la première instruction de surveillance 41, qui correspond ici à l'écriture par l'unité de surveillance AM de la 3047585 9 valeur de référence dans le premier registre R1, l'unité de surveillance AM déclenche la décrémentation du compteur CPT. Lors de l'exécution de l'instruction de saut conditionnel, deux cas de figure peuvent se présenter. 5 Le premier cas de figure correspond au cas où la condition de saut de l'instruction conditionnel n'est pas vraie. Alors, le saut d'adresses ne se fait pas et l'exécution du programme se poursuit par l'extraction et l'exécution (étape E9) du contenu du troisième emplacement mémoire 23, qui suit directement le premier emplacement 10 mémoire. L'étape E9 comporte également l'exécution de la troisième instruction de surveillance 43, qui correspond à une remise à sa valeur initiale de la valeur du registre R1, par exemple une remise à zéro. L'unité de surveillance stoppe alors la décrémentation du compteur 15 CPT et le réinitialise. L'exécution du code programme se poursuit alors (étape E7) de manière classique. Le second cas de figure correspond au cas où la condition de saut de l'instruction de saut conditionnel est vraie. Alors, l'exécution 20 du code programme se poursuit au deuxième emplacement mémoire 22. La décrémentation du compteur CPT n'est pas arrêtée par l'unité de surveillance AM. L'étape E4 correspond à l'extraction du contenu du deuxième emplacement mémoire 22. Comme décrit précédemment, les vingt-huit 25 premiers bits correspondant à la deuxième instruction de code programme 32, non surveillée, sont extraits vers l'unité centrale de traitement CPU, et les quatre bits restants correspondant à la deuxième instruction de surveillance 42 sont extraits vers l'unité de surveillance AM, les deux extractions se faisant simultanément. 30 L'unité de traitement CPU exécute la deuxième instruction de code programme 32, et l'unité de surveillance AM exécute la deuxième instruction de surveillance 42. L'unité de surveillance AM écrit donc la valeur de référence dans le deuxième registre R2. 3047585 10 Dans le cas d'un déroulement normal du programme, les deux registres R1 et R2 comportent donc la même valeur de référence. A la fin du décompte du compteur CPT, le comparateur CMP de l'unité de surveillance compare (étape E6) les valeurs des deux 5 registres R1 et R2. Si les deux valeurs sont égales, cela signifie que l'instruction de saut a bien été exécutée, et le programme continue son exécution (étape E7). Si les valeurs ne sont pas égales, cela signifie que l'exécution ne s'est pas déroulée normalement et l'unité de surveillance génère alors une erreur (étape E8). 10 Par exemple, lors de l'exécution de l'instruction de saut 31 le programme pourrait sauter à un mauvais emplacement mémoire 24, en raison d'un dysfonctionnement ponctuel ou d'une modification du code programme par un attaquant extérieur. Le mauvais emplacement mémoire 24 ne comportant pas la deuxième instruction de surveillance 15 42, le deuxième registre R2 ne contiendrait pas la valeur de référence. Selon un autre mode de réalisation illustré sur la figure 4, la première instruction de surveillance 41 à une taille supérieure à la taille de la partie libre PL du premier emplacement mémoire, par exemple une taille de huit bits. La première instruction de surveillance 20 41 est donc séparée en deux parties 410 et 411. La première partie 410 est stockée dans la partie libre d'un cinquième emplacement mémoire 25 précédant le premier emplacement mémoire 25, et la deuxième partie 411 est stockée dans la partie libre PL du premier emplacement mémoire 21. 25 Il en est de même pour la deuxième instruction de surveillance 42, dont une première partie 420 est stockée dans la partie libre PL d'un sixième emplacement mémoire 26 précédant le deuxième emplacement mémoire 22, et une deuxième partie 421 est stockée dans la partie libre PL du deuxième emplacement mémoire 22. 30 Selon un autre mode de réalisation illustré sur la figure 5, chaque emplacement mémoire 2 peut recevoir deux mots d'instruction 3 du code programme, par exemple des mots d'instructions de quatorze bits chacun. 3047585 11 Ici, le premier emplacement mémoire 21 comporte en plus du premier mot d'instruction 31 une troisième instruction de code programme 33, ici une instruction quelconque dont l'exécution n'est pas surveillée. Le premier emplacement mémoire 21 comporte 5 également dans sa partie libre PL une quatrième instruction de surveillance 44 se rapportant au premier mot d'instruction 31 de code programme, par exemple une instruction de huit bits. Le cinquième emplacement mémoire 25 précédant le premier emplacement mémoire 21 comporte un paramètre 441 qui complète la 10 quatrième instruction de surveillance 44. Ici, le paramètre 441 indique à laquelle des deux instructions 31 ou 33 la quatrième instruction de surveillance 44 se rapporte. Il convient de noter que les modes de mise en oeuvre et de réalisation présentés ici ne sont nullement limitatifs. Notamment, il 15 serait tout à fait possible d'envisager que l'unité de surveillance AM soit un module matériel incorporé dans le processeur CPU. REVENDICATIONS1. Procédé de surveillance de l'exécution d'un code programme par un code programme de surveillance, caractérisé en ce que on stocke le code programme dans une mémoire (MEM) comprenant des emplacements mémoires (2) capables chacun de stocker au moins un mot d'instruction (31) du code programme et ayant une capacité de stockage supérieure à la taille des mots d'instruction (31, 32, 33) du code programme, pour chaque emplacement mémoire (21, 22, 23) comprenant au moins une instruction du code programme à surveiller on stocke dans la partie libre (PL) de l'emplacement mémoire contenant ladite au moins une instruction (21) à surveiller, au moins une partie d'une instruction de surveillance (41) du code programme de surveillance, on extrait simultanément de la mémoire programme (MEM) ladite au moins une instruction (31) à surveiller et ladite au moins une partie de ladite instruction de surveillance (41), et on exécute ladite au moins une instruction à surveiller (31) et ladite instruction de surveillance (41). 2. Procédé selon la revendication 1, dans lequel l'instruction de surveillance (41) a une taille supérieure à la taille de la partie libre, et dans lequel on stocke une première partie (410) de l'instruction de surveillance dans la partie libre de l'emplacement mémoire (21) contenant ladite au moins une instruction (21) à surveiller, et on stocke une deuxième partie (411) de l'instruction de surveillance dans la partie libre d'au moins un emplacement mémoire (25) précédant l'emplacement mémoire (21) contenant ladite au moins une instruction (31) de code programme à surveiller. 3047585 13 3. Procédé selon la revendication 1, dans lequel l'emplacement mémoire (21) contenant ladite au moins une instruction à surveiller comporte plusieurs mots d'instruction (31, 32) et on stocke dans la partie libre d'au moins un emplacement mémoire (25) 5 précédant l'emplacement mémoire (21) contenant ladite au moins une instruction (31) de code programme à surveiller une information (441) désignant ladite au moins une instruction (31) à laquelle l'instruction de surveillance (44) se rapporte. 4. Procédé selon l'une des revendications précédentes, dans 10 lequel on stocke dans un emplacement mémoire (22) situé à une adresse ultérieure à celle de l'emplacement mémoire (21) comprenant ladite au moins une instruction (31) de code programme à surveiller, au moins une partie (420, 421) d'une autre instruction de surveillance (42) du code de surveillance, l'instruction à surveiller (31) étant une 15 instruction de branchement pointant vers ledit emplacement mémoire suivant (22). 5. Dispositif de surveillance d'un code programme par un code programme de surveillance, caractérisé en ce qu'il comprend une mémoire (MEM) comprenant des emplacements mémoires (2) capables 20 chacun de stocker au moins un mot d'instruction (31) du code programme et ayant une capacité de stockage supérieure à la taille des mots d'instruction du code programme, chaque emplacement mémoire (2) comportant une partie libre (PL) capable de stocker au moins une partie d'une instruction de surveillance (41) du code programme de 25 surveillance, le dispositif comportant des moyens configurés pour effectuer une extraction simultanée (1) de ladite au moins une instruction (31) à surveiller et de ladite au moins une partie de ladite instruction de surveillance (41), et des moyens (AM, CPU) d'exécution de ladite instruction à surveiller (31) et de ladite au moins une partie 30 de l'instruction de surveillance (41) 6. Dispositif selon la revendication 5, dans lequel l'instruction de surveillance (41) a une taille supérieure à la taille de la partie libre (PL), et ladite partie libre (PL) de l'emplacement mémoire (21) contenant ladite au moins une instruction à surveiller 3047585 14 (31) est capable de recevoir une première partie (410) de l'instruction de surveillance (41), et la partie libre (PL) d'un emplacement Mémoire (23) précédant l'emplacement mémoire (21) contenant ladite au moins une instruction de code programme (31) à surveiller est capable de 5 contenir une deuxième partie (411) de l'instruction de surveillance (41). 7. Dispositif selon la revendication 5, dans lequel l'emplacement mémoire (21) contenant ladite au moins une instruction à surveiller (31) comporte plusieurs mots d'instruction (31, 33) et la 10 partie libre d'au moins un emplacement mémoire (25) précédant l'emplacement mémoire (21) contenant ladite au moins une instruction (31) de code programme à surveiller comprend une information (441) désignant ladite au moins une instruction (31) à laquelle l'instruction de surveillance (44) se rapporte. 15 8. Dispositif selon l'une des revendications 5 à 7, dans lequel un emplacement mémoire (22) situé à une adresse ultérieure à celle de l'emplacement mémoire (21) comprenant ladite au moins une instruction de code programme (31) à surveiller est capable de contenir au moins une partie (420,421) d'une autre instruction (42) du 20 code de surveillance, l'instruction à surveiller (31) étant une instruction de branchement pointant vers ledit emplacement mémoire suivant (22). 25