FR2982385A1 - Operation de compilation repartie avec prise en charge d'une signature d'instruction - Google Patents

Operation de compilation repartie avec prise en charge d'une signature d'instruction Download PDF

Info

Publication number
FR2982385A1
FR2982385A1 FR1201962A FR1201962A FR2982385A1 FR 2982385 A1 FR2982385 A1 FR 2982385A1 FR 1201962 A FR1201962 A FR 1201962A FR 1201962 A FR1201962 A FR 1201962A FR 2982385 A1 FR2982385 A1 FR 2982385A1
Authority
FR
France
Prior art keywords
signature
instruction
relating
code
language
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1201962A
Other languages
English (en)
Other versions
FR2982385B1 (fr
Inventor
Stefan Mangard
Berndt Gammel
Juergen Duve
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Publication of FR2982385A1 publication Critical patent/FR2982385A1/fr
Application granted granted Critical
Publication of FR2982385B1 publication Critical patent/FR2982385B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Module (212) de compilateur pour fournir une prise en charge d'une signature d'instruction à un compilateur (210), qui comprend un identificateur (213) d'élément de langage et un composant (215) d'insertion de réserve configuré pour interagir avec le compilateur (210) pour insérer au moins une réserve dans un code compilé traité par le compilateur (210).

Description

OPERATION DE COMPILATION REPARTIE AVEC PRISE EN CHARGE D'UNE SIGNATURE D'INSTRUCTION DOMAINE TECHNIQUE La présente demande se rapporte à un module de compilateur pour fournir une prise en charge de signature d'instruction à un compilateur, et plus particulièrement au traitement d'une information pertinente pour une signature d'instruction pendant une opération de compilation d'un code source en langage de haut niveau.
ARRIERE-PLAN Une unité informatique programmable est conçue typiquement pour traiter une séquence d'instruction pour effectuer une certaine tâche. On peut désigner aussi la séquence d'instruction comme étant un code de programme.
Le code de programme est mémorisé typiquement dans une mémoire et est fourni à l'unité informatique pendant un temps d'exploitation. En vue d'avoir une sécurité de l'information, il peut être souhaitable d'empêcher les instructions d'être analysées alors qu'elles sont mémorisées dans la mémoire ou transmises de la mémoire à l'unité informatique. D'autre part, des erreurs peuvent se produire pendant l'exécution du code de programme si les instructions atteignant l'unité informatique diffèrent des instructions souhaitées. Les différences entre l'instruction traitée vraiment par l'unité informatique et les instructions souhaitées peuvent avoir une cause aléatoire ou peuvent être provoquées délibérément par un intrus. En tout cas, il faut détecter précocement des erreurs provoquées par des instructions altérées.
On peut utiliser des procédés de contrôle de flux de commande pour détecter des différences de ce genre entre les instructions vraiment traitées par l'unité informatique et les instructions souhaitées. Le principe sous-jacent de procédés de contrôle de flux de commande, qui sont basés sur des signatures d'instruction, est de faire la somme des instructions exécutées pendant un temps d'exécution d'un programme en une somme de contrôle (c'est-à-dire la signature) pendant le temps d'exploitation du programme et de vérifier à des points du programme déterminés à l'avance si la somme de contrôle correspond à une valeur de référence. Une différence entre la somme de contrôle et la valeur de référence indique un écart possible entre l'exécution réelle du programme et l'exécution du programme que l'on vise. Lorsqu'un contrôle de flux de commande prenant en charge un programme est créé ou compilé, la plupart des procédés de contrôle de flux de commande connus 20 communément exigent que, ce que l'on appelle les valeurs de mise à jour soient insérées en des points précis dans le programme. Si, par exemple, un saut de programme ou un point de branchement se produit et si les deux trajets différents (différents en ce sens que des séquences 25 d'instruction différentes sont exécutées et conduisent à des signatures différentes) refusionnent, les signatures provenant d'une exécution des trajets ont besoin d'être cohérentes au point de fusion. A cette fin, on insère une valeur de mise à jour dans au moins l'un des trajets. Des 30 branchements se produisent à des sauts (directs) conditionnels, à des sauts indirects, à des appels de fonction directs et indirects. En outre, on a besoin de valeurs de référence au point de programme où la comparaison de la signature calculée et de la valeur de référence est effectuée. Ces valeurs de référence ont besoin d'être introduites au point de programme approprié dans le programme. RESUME L'invention a pour objet un module de compilateur pour fournir une prise en charge d'une signature d'instruction à un compilateur, le module de compilateur étant caractérisé en ce qu'il comprend un identificateur d'élément de langage configuré pour identifier un élément de langage pertinent pour une signature d'instruction dans un code source de langage de haut niveau fourni au compilateur et un composant d'insertion de réserve configuré pour interagir avec le compilateur pour insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de langage se rapportant à une signature d'instruction dans un code compilé traité par le compilateur sur la base du code source de langage de haut niveau. De préférence : - l'insertion de la réserve se rapportant à une signature conserve une fonction logique du code de langage de haut niveau d'origine donnée au compilateur, - le module a une interface de base de données configurée pour interroger une base de données comprenant une pluralité d'éléments de langage possible pertinente pour une signature d'instruction et des réserves correspondantes se rapportant à une signature d'instruction à utiliser par l'identificateur d'éléments de langage et par le composant d'insertion de réserve, - la pluralité d'éléments de langage possible pertinente pour une signature d'instruction comprend au moins l'un d'un saut conditionnel, d'un élément si alors, d'un élément de cas de commutation, d'un élément de pendant une boucle, d'un élément fait pendant et d'un mot-clé dédié se rapportant à une signature d'instruction, - la base de données comprend, en outre, au moins une règle d'insertion pour commander le composant d'insertion de réserve en ce qui concerne l'insertion de la au moins une réserve se rapportant à une signature d'instruction, - le code compilé est un code en langage machine et le composant d'insertion de réserve est configuré pour sélectionner la au moins une réserve se rapportant à une signature d'instruction, de manière à ce qu'une dimension de la au moins une réserve se rapportant à une signature d'instruction soit égale au moins à une dimension d'une instruction en langage . machine ou d'une séquence d'instruction en langage machine remplaçant finalement la au moins une réserve se rapportant à une signature d'instruction dans le code compilé, - la au moins une réserve se rapportant à une signature d'instruction est l'une d'une réserve pour une valeur de signature de référence et d'une réserve pour une instruction se rapportant à une signature d'instruction, - un collecteur d'information de réserve est configuré pour collecteur une information de réserve sur des réserves se rapportant à une signature d'instruction insérée dans le code compilé et pour sortir l'information de réserve, - l'identificateur d'élément de langage est configuré pour identifier un segment de code de programme protégé pour lequel la prise en charge de la signature d'instruction est validée et le module de compilateur comprend, en outre, un collecteur d'information d'appel de bibliothèque configuré pour collecter de l'information d'appel de bibliothèque se rapportant à des appels de bibliothèque logiciel se produisant dans le segment de code de programme protégé et pour fournir l'information d'appel de bibliothèque en vue de l'utiliser pendant une opération de liaison venant ensuite, - l'identificateur d'élément de langage est configuré pour identifier un début et une fin d'un segment de code de programme protégé dans le code source en langage de haut niveau, pour lequel la prise en charge d'une signature d'instruction est validée et le composant d'insertion de réserve est configuré pour utiliser un résultat d'une identification de segment protégé correspondant afin d'activer l'insertion de la au moins une réserve se rapportant à une instruction dans le segment de code programme protégé et de désactiver l'insertion de la au moins une réserve se rapportant à une signature d'instruction dans un segment de code de programme non protégé, et - le composant d'insertion de réserve est configuré, en outre, pour vérifier si une optimisation de code du compilateur entre en conflit avec la au moins une réserve se rapportant à une signature d'instruction et, après vérification d'un conflit, pour empêcher le compilateur d'effectuer une optimisation du code compilé qui affecte la au moins une réserve se rapportant à une signature d'instruction. L'invention vise aussi un générateur de signature d'instruction, caractérisé en ce qu'il comprend une entrée pour un code compilé, un identificateur de réserve configuré pour identifier une réserve se rapportant à une signature d'instruction dans le code compilé, un calculateur de signature configuré pour déterminer une valeur de signature pour un point de programme dans le code compilé où la réserve se rapportant à une signature d'instruction se produit, et un remplaceur de réserve configuré pour insérer un segment de code compilé sur la base de la valeur de signature au point de programme. De préférence : - le code compilé est l'un d'un code en langage machine et d'un code d'assembleur, - le segment de code compilé produit par le remplaceur de réserve occupe un espace dans le code compilé qui est égal à un espace occupé par la réserve se 10 rapportant à une signature d'instruction, - le segment de code compilé comprend une instruction de processeur et le remplaceur de réserve est configuré pour sélectionner une instruction particulière de processeur parmi une pluralité d'instructions de 15 processeur et pour produire le segment de code compilé sur la base de l'instruction particulière de processeur, - le calculateur de signature- est configuré pour effectuer une analyse de bloc de base sur le code compilé sur la base de laquelle la valeur de signature est 20 calculée, - une interface d'information de réserve est configurée pour recevoir de l'information de réserve comprenant de l'information auxiliaire sur la réserve se rapportant à la signature de l'instruction et pour 25 fournir l'information auxiliaire au calculateur de signature, et - l'information auxiliaire comprend au moins l'un d'une dimension d'une table se rapportant à un point de branchement multiple dans le code compilé, d'une adresse 30 de mémoire indiquant une fin d'une fonction, d'une liste comprenant une information sur la au moins une réserve se rapportant à une signature d'instruction insérée dans le code compilé et sa position et d'une table d'adresse indiquant un début et une fin d'au moins un segment de code protégé dans le code compilé, pour lequel la prise en charge d'une signature d'instruction est validée et le calculateur de signature est configuré pour utiliser la table d'adresse pour déterminer la valeur de signature.
L'invention vise aussi un procédé de traitement d'une information pertinente pour une signature d'instruction pendant une opération de compilation d'un code source en langage de haut niveau, procédé caractérisé en ce qu'on identifie un élément de langage pertinent pour une signature d'instruction dans le code source en langage de haut niveau, et on interagit avec l'opération de compilation afin d'insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de langage pertinent pour une signature d'instruction dans un code compilé traité par l'opération de compilation sur'la base du code source en langage de haut niveau. De préférence : - la réserve se rapportant à une signature est 20 transparente à l'opération de compilation, - on interroge une base de données comprenant une pluralité d'éléments de langage possibles pertinents pour une signature d'instruction et des réserves correspondantes se rapportant à une signature 25 d'instruction à utiliser pendant l'identification de l'élément de langage se rapportant à une signature d'instruction et pendant l'interaction avec l'opération de compilation, - la pluralité d'éléments de langage possibles se 30 rapportant à une signature d'instruction comprend au moins l'un d'un saut conditionnel, d'un élément si alors, d'un élément de cas de commutation, d'un élément pendant une boucle, d'un élément fait pendant et d'un mot-clé dédié se rapportant à une signature d'instruction, - la base de données comprend, en outre, une règle d'insertion pour commander l'insertion de la au moins une réserve se rapportant à une signature d'instruction, - le code compilé est un code en langage machine et 5 la au moins une réserve se rapportant à une signature d'instruction est sélectionnée, de manière à ce qu'une dimension de la au moins une réserve se rapportant à une signature d'instruction soit égale à une dimension d'une instruction en langage machine ou d'une séquence 10 d'instruction en langage machine remplaçant finalement la au moins une réserve se rapportant à une signature d'instruction dans le code compilé, - la réserve se rapportant à une signature d'instruction est l'une d'une réserve pour une valeur de 15 signature de référence, d'une réserve pour une valeur de mise à jour de signature et d'une réserve pour une instruction se rapportant à une signature d'instruction, - on recueille de l'information de réserve sur des réserves se rapportant à une signature d'instruction 20 insérée dans le code compilé et on sort l'information de réserve, - on identifie un segment de code de programme protégé pour lequel la prise en charge d'une signature d'instruction est validée, on recueille de l'information 25 d'appel de bibliothèque se rapportant à des appels de bibliothèque logiciels se produisant dans le segment de code de programme protégé et on fournit l'information d'appel de bibliothèque en vue de l'utiliser pendant une opération de liaison venant ensuite, 30 - on identifie en tant qu'identification de segment protégé un début et une fin d'un segment de code de programme protégé dans le code source en langage de haut niveau pour lequel la prise en charge de la signature d'instruction est validée et on utilise un résultat de l'identification du segment protégé afin d'activer l'insertion de la au moins une réserve se rapportant à une signature d'instruction au sein du segment du code de programme protégé pour désactiver l'insertion de la au moins une réserve se rapportant à une signature d'instruction au sein du segment de code de programme protégé dans un segment de code de programme non protégé, et - on vérifie si une optimisation de code de l'opération de compilation entre en conflit avec la au moins une réserve se rapportant à une signature d'instruction et, après avoir trouvé un conflit, on empêche l'opération de compilation d'effectuer une optimisation du code compilé qui affecte la au moins une réserve se rapportant à une signature d'instruction. L'invention vise enfin un' support de mémorisation numérique pouvant être exploitée par ordinateur et ayant mémorisé sur lui un programme informatique ayant un code de programme pour effectuer lorsqu'il passe sur un ordinateur un procédé de traitement d'une information pertinente pour une signature d'instruction pendant une opération de compilation d'un code source en langage de haut niveau, le procédé comprenant : identifier un élément de langage pertinent pour une signature d'instruction dans le code source en langage de haut niveau et interagir avec l'opération de compilation afin d'insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de langage pertinent pour une signature d'instruction dans un code compilé traité par l'opération de compilation sur la base du code source en langage de haut niveau. DESCRIPTION SUCCINCTE DES DESSINS Les éléments des dessins ne sont pas nécessairement à l'échelle les uns par rapport aux autres. Des mêmes repères désignent des parties similaires qui se correspondent. Des caractéristiques des divers modes de réalisation illustrées peuvent être combinées, à moins qu'elles ne s'excluent. Des modes de réalisation sont représentés aux dessins et sont détaillés dans la description qui va suivre. La figure 1 est un organigramme schématique d'une séquence d'instruction comprenant un branchement 10 conditionnel, un trajet par défaut et un. trajet par non-défaut. La figure 2 est un organigramme schématique d'une opération de compilation procurant une prise en charge d'une signature d'instruction. 15 La figure 3 est un schéma fonctionnel d'un compilateur et d'un module de compilateur pour procurer une prise en charge d'une signature d'instruction au compilateur. La figure 4 illustre les effets d'un module de 20 compilateur pour une prise en charge d'une signature d'instruction et un générateur de signature d'instruction. La figure 5 est un schéma fonctionnel d'un générateur de signature d'instruction. 25 La figure 6 est un organigramme schématique d'un procédé de traitement d'une information pertinente pour une signature d'inscription. DESCRIPTION DETAILLEE Des signatures de flux d'instruction procurent 30 typiquement une protection relativement forte de l'intégrité du code de programme. Comme on peut le voir à la figure 1, chaque séquence de code ayant des instructions de branchement conditionnelles (par exemple, instruction i2) a un "trajet par défaut", à la figure 1 par l'intermédiaire des instructions i3 et i4 jusqu'au point de fusion à l'instruction i5. Pour ce "trajet par défaut", on calcule une signature S5 par un analyseur de code statique. Pour traiter un "trajet par non défaut" (par exemple de l'instruction i2 directement à l'instruction i5), à chaque branchement conditionnel, on effectue une mise à jour de la signature, de sorte que la signature est la même que si le trajet par défaut avait été pris. Cela est illustré à la figure 1 par la flèche marquée "update Sl+A", qui signifie que S1 est modifiée de la même manière que S1 avait été modifiée par l'instruction i3 et i4, si le trajet par défaut avait été pris. Quel trajet est le trajet par défaut peut être défini implicitement par l'utilisateur ou par le programmeur, si le trajet par défaut est le seul trajet sans mise à jour du début à la fin. D'une manière générale, n'importe lequel des trajets peut être le trajet par défaut.
Un programme réaliste contient typiquement une pluralité de points de programme ayant des valeurs de mise à jour ou des valeurs de référence. Les valeurs de mise à jour et de référence sont désignées aussi communément comme étant des valeurs de signature. Les positions ou points de programme où les valeurs de signature sont insérées sont désignés comme étant des positions de signature. L'abréviation ISS signifie signature de flux d'instruction. Un procédé pour créer un code protégé de flux de commande consiste en ce que le programmeur insère manuellement les valeurs de signature dans des parties sélectionnées du code aux positions de signature qui lui sont connues. A cette fin, le programmeur doit déterminer lui-même à la fois les valeurs de signature et les positions de signature. Mais, de nombreux compilateurs et éléments de liaison effectuent des stades d'optimisation et des modifications des séquences d'instruction au sein du code de programme, qui sont difficiles à anticiper par 5 le programmeur. Avoir le programmeur qui détermine les valeurs de signature et les positions de signature lui-même peut conduire à un flux de travail itératif élaboré et sujet à erreur et à des restrictions qui dépendent du niveau 10 auquel les valeurs de signatures peuvent. être insérées. Certaines des restrictions qui peuvent se produire sont : Lorsqu'on insère les valeurs de signature dans un langage de haut niveau, le programmeur peut utiliser typiquement seulement un sous-jeu des 15 éléments de langage d'une langue de programmation pour que l'insertion de valeurs de signature soit possible. C'est ainsi, par exemple, qu'avec des éléments de langage spécifiques dans des langages de programmation de haut niveau utilisés 20 communément, toutes les positions de signature ne sont pas accessibles à partir du niveau de code- source. Un branchement conditionnel de la forme a) si x>0 et x<1 alors gère séquence d'instruction A 25 b) fin si gère séquence d'instruction B peut se traduire fréquemment en deux sauts conditionnels, parce que deux conditions sont vérifiées dans la première instruction afin 30 d'arriver à la séquence d'instruction A. Mais un bon compilateur éviterait de vérifier les deux conditions afin de provoquer seulement un saut, puisque cela résulterait en moyenne en un code plus lent de plus de 50%. C'est pourquoi deux valeurs de mise à jour seraient insérées dans les deux trajets par non-défaut. Mais cela n'est pas possible au niveau du code source et c'est pourquoi un autre élément de programme doit être utilisé. - Insérer des valeurs de signature à un niveau de langage d'assembleur n'est pas toujours possible pour un code qui a été écrit dans un langage de haut niveau. De nombreux compilateurs produisent directement un code binaire (code en langage machine) et le niveau d'assembleur n'est pas disponible du tout. - Une insertion de valeurs de signature au niveau du code binaire (niveau de code machine) provoque des décalages d'instructions dans le code de programme et ainsi les destinations de saut doivent être corrigées en conséquence. Cette opération est très complexe parce que toutes les origines de saut et les destinations de saut doivent être analysées. En outre, il est aussi possible que les instructions de saut ou de branchement aient même à être remplacées, parce que les distances de saut se décalent tellement qu'elles peuvent être au-delà de la plage de l'instruction de saut qui est prévue dans le code binaire. - Sur chaque niveau, le programmeur peut faire des erreurs pour trouver les positions de signature (par exemple, omission par inadvertance d'une position de signature) et/ou calculer de manière erronée des valeurs de signature. Les optimisations effectuées par le compilateur et/ou par l'élément de liaison peuvent obliger le programmeur à d'autres limitations et à d'autres efforts.
En particulier, les modifications du code par le compilateur et l'élément de liaison peuvent être traitées de la manière suivante : - Le programmeur crée d'abord un code binaire au moyen du compilateur et de l'élément de liaison. - Le programmeur sélectionne un procédé de signature d'instruction qui est transparent en ce qui concerne les modifications provoquées par le compilateur et l'élément de liaison. L'effet de la signature est réduit massivement dans ce cas, parce que le procédé de signature d'instruction est transparent aux modifications du compilateur et de l'élément de liaison. Le module de compilateur, le générateur de signature d'instruction, la structure de données .d'interface du compilateur, le procédé de traitement d'une information pertinente pour une signature d'instruction pendant une opération de compilation d'un code source en langage de haut niveau et un support correspondant de mémorisation numérique pouvant être lu par un ordinateur suivant les modes de réalisation suivant l'invention pallie les inconvénients des procédés de signature d'instruction existants. Suivant l'invention, des mesures effectuées pendant le stade de compilation et à un stade venant ensuite de génération de signature sont combinées d'une manière efficace. L'invention permet ainsi une prise en charge complète pour des langages de programmation communs, de sorte que i) la syntaxe du langage de programmation peut être utilisée en plein dans des programmes et parties de programme protégés par flux de commande et ii) la production de programmes et parties de programme protégés par un flux de commande à partir par exemple de parties de programmes non protégées peut être effectuée d'une manière virtuellement automatisée complètement. L'invention se rapporte ainsi à un procédé de compilation répartie ayant une prise en charge de signature d'instruction et/ou à une production de programmes (informatiques) ayant une commande du flux d'instruction. L'invention facilite l'automatisation de l'insertion et du calcul des valeurs de signature ainsi que de la séparation de l'opération en deux stades principaux (substantiellement l'insertion de réserve et le calcul).
L'invention se rapporte aussi à l'interface ou aux interfaces entre les deux stades. On effectue les deux stades principaux par des outils séparés, un module de compilateur ("compilateur de signature") et un générateur de signature d'instruction.
Le programmeur peut influencer l'application de la prise en charge d'une signatûre d'instruction par l'intermédiaire du code source en langage de haut niveau qui est fourni au compilateur. C'est ainsi, par exemple, qu'au début du code à 20 protéger, l'utilisateur peut valider l'ISS (signature de flux d'instruction) par une fonction FCT ISS Start(). A la fin de la séquence du code (ou segment de code de programme protégé) à protéger, une fonction FCT ISS Stop() vérifie la signature et arrête à nouveau 25 l'ISS. Un paramètre constant ref utilisé dans la fonction FCT ISS Start() est calculé à un instant ultérieur par le générateur d'instruction de signature et mis dans un fichier (.elf file) comprenant le code compilé par un vérificateur statique de code (ou un générateur de 30 signature d'instruction). Au tout début de la fonction, il faut insérer, un ISS UPDATE, une réserve dans laquelle la valeur constante est calculée et mise par le vérificateur statique de code. Après chaque appel de fonction, des appels directs et indirects, une réserve ISS UPDATE doit être insérée là où la constante est calculée et mise de manière à ce que la valeur correcte au FCT ISS Check() ou FCT ISS STOP() suivante soit atteinte.
Avec la fonction FCT ISS States(), l'utilisateur peut contrôler si une séquence de code ISS a été exécutée correctement. Pendant un passage d'une séquence de code ISS, l'utilisateur peut insérer des points de contrôle supplémentaires à des points de sécurité critiques par l'intermédiaire de FCT ISS Check(), où .le paramètre constant ref est calculé et mis de manière à ce que la valeur à laquelle on s'attend soit dans un registre dédié (registre ISS DATA) du processeur ou d'un module de signature, pourvu que l'exécution de l'instruction ne contienne pas d'erreur. La figure 2 illustre l'intégration d'une ISS dans le flux d'outil, c'est-à-dire dans un environnement de compilation utilisé pour transformer un code source en langage de haut niveau en un code binaire apte à être 20 exécuté (directement) par un processeur. La prise d'en charge d'une ISS a fondamentalement deux parties : le compilateur prend en charge (par exemple, sous la forme d'un module de compilateur extérieur ou intérieur) l'insertion d'une réserve ISS UPDATE 25 et envoie certaines informations au vérificateur statique de code, le compilateur prend en charge la reconnaissance de régions de programme (par exemple, des fonctions) qui doivent être protégées par une ISS ; le compilateur prend en 30 charge la reconnaissance de fonctions spéciales en relation avec une ISS, telles que FCT ISS Check(). Le compilateur étendu par une prise en charge d'une signature d'instruction est désigné aussi par "compilateur de signature" dans le présent exposé. - un générateur de signature d'instruction ou un vérificateur statique de code qui est un outil de post traitement qui fait le calcul de signature et remplace la réserve ISSUPDATE par les valeurs de signature. Afin de donner une compréhension générale de l'interaction entre les deux parties, on décrira brièvement dans ce qui suit les fonctions principales du 10 compilateur de signature et du générateur de signature d'instruction. Le compilateur de signature met en jeu typiquement les aspects suivants : - insertion de réserve pour des valeurs de 15 signature en des positions de signature. Les positions sont déterminées sur la base de pragmas et/ou de mots-clés à un niveau du code source et d'un jeu de règles. Le jeu de règles sera expliqué d'une manière plus détaillée ci-dessus. 20 - une production facultative d'information de commande dénommée "information de commande de signature". la fourniture de bibliothèques de logiciels dénommées "fonctions de bibliothèque de 25 signature" dont les éléments sont sélectionnés sur la base de l'information de commande. Le générateur de signature d'instruction met en jeu typiquement les aspects suivants : - lecture du code compilé produit par le 30 compilateur de signature et, si cela s'applique, de l'information de commande de signature ; - calcul des valeurs de signature sur la base d'un bloc de base et d'une analyse de trajet par défaut ; et insertion des valeurs de signature calculées en les positions des réserves correspondantes. La notion d'une "insertion de signature" signifie d'une manière générale insérer une ou plusieurs instructions machine à l'emplacement de la réserve qui contient l'information sur la valeur de signature et éventuellement des instructions nécessaires pour traiter la valeur de signature, par exemple pour mettre à jour la signature.
A la figure 2, un ou plusieurs fichiers 202 de source (par exemple, dans le langage C de haut niveau, tel qu'indiqué par l'extension du nom de fichier ".c") est/sont fourni(s) au compilateur 210. Le compilateur 210 comprend un module 212 de compilateur ("extension d'ISS"), qui ajoute une prise en charge pour un traitement spécifique à une signature d'instruction au compilateur 210. Comme représenté à la figure 2, le module 212 de compilateur peut être intégré au compilateur 210. Dans la variante, le module 212 de compilateur peut être un module extérieur sous la forme par exemple d'une bibliothèque reliée dynamiquement, d'un objet dynamique partagé, d'un élément supplémentaire, d'un élément enfichable ou d'une extension logicielle. Le compilateur 210 produit un fichier 222 objet ayant l'extension du nom de fichier ".o" sur la base du ou des fichier(s) 202 source. En outre, le compilateur 210 peut produire un fichier 214 liste, le plus souvent à des fins d'information et/ou de débogage. Le code compilé dans le fichier 222 objet comprend typiquement plusieurs réserves se rapportant à une signature d'instruction en divers points de programme. Les réserves se rapportant à une signature d'instruction ont été ajoutées au code compilé par le module 212 de compilateur, afin de réserver de l'espace de mémoire qui est disponible pour une insertion à venir des valeurs de signature. Le module 212 de compilateur peut effectuer l'insertion des réserves sensiblement en concurrence avec le compilateur 210 compilant le code source. Le compilateur 210 est ainsi au fait des réserves insérées à un stade précoce de l'opération de compilation et peut prendre en considération l'information sur les réserves, leurs emplacements et leurs dimensions, tout en continuant l'opération de compilation, en particulier lorsqu'il calcule. des destinations de branchement ou de saut. Le module 212 de compilateur peut surveiller la progression de l'opération de compilation, c'est-à-dire quel élément de langage au sein du code 202 de source est traité présentement par le compilateur 210. L'insertion de la réserve se rapportant à une signature préserve la fonction logique du code en langagé de haut niveau donné au compilateur 210. Le compilateur 210 est au fait que des stades d'optimisation ne modifient pas ou ne déplacent pas les réserves insérées d'une façon qui décrit les capacités de contrôle d'erreur d'une ISS, par exemple en logeant des mises à jour de signature à l'extérieur d'une boucle pendant une optimisation d'invariant de boucle. Le code compilé peut être un code en langage machine. Le composant d'insertion de réserve peut être configuré pour sélectionner la au moins une réserve se rapportant à une signature d'instruction de manière à ce qu'une dimension de la au moins une réserve se rapportant à une signature d'instruction ait une dimension égale à une dimension d'une instruction en langage machine ou d'une séquence d'instruction en langage machine remplaçant finalement la au moins une réserve se rapportant à une signature d'instruction dans le code compilé.
Dans la variante à l'utilisation d'un fichier source écrit dans un langage de haut niveau tel que C en connexion avec le compilateur 210, un programmeur peut aussi choisir d'écrire un fichier 205 source dans un langage d'assembleur qui peut être alors traité par un assembleur 216. L'assembleur 216 produit aussi un fichier 226 objet et un fichier 218 liste facultatif. Dans la figure 2, l'assembleur 216 n'inclut pas un module qui ajouterait une prise en charge d'un traitement spécifique à une signature d'instruction à l'assembleur 216. C'est pourquoi le programmeur ajoute lui-même toute réserve se rapportant à une signature d'instruction dans le listing de l'assembleur, par exemple par l'intermédiaire d'une macro qui écrit un code binaire déterminé à l'avance au point de programme où il se produit. Bien. que cela ne soit pas illustré à la figure 2, l'assembleur 216 pourrait d'une manière générale inclure un module d'assembleur ou interagir avec lui, module qui procurerait une fonctionnalité similaire à celle du module 212 de compilateur. Suivant que l'on souhaite produire un programme exécutable ou un fichier de bibliothèque de logiciel à partir du fichier 222 objet, le fichier 222 objet est envoyé à un gestionnaire 230 de bibliothèque ou à un élément de liaison/releveur de coordonnées 240. D'une manière similaire, le fichier 226 objet créé par l'assembleur 216 peut être envoyé au gestionnaire 230 de bibliothèque ou à l'élément de liaison/releveur de coordonnées 240. En outre, un ou plusieurs fichiers de bibliothèque peut être envoyé au gestionnaire 230 de bibliothèque ou à l'élément de liaison/releveur de coordonnées 240. Le gestionnaire 230 de bibliothèque sort un fichier 232 bibliothèque. L'élément de liaison/releveur de coordonnées 240 sort une image 246 ELF (fichier exécutable et reliable). L'élément de liaison/releveur de coordonnées 240 peut utiliser un fichier 244 éclaté comme autre entrée pour l'opération de liaison et de localisation qui détermine fondamentalement 5 comment l'agencement de mémoire d'un processeur est organisé, quand l'image 246 ELF résultante est chargée. L'élément 240 de liaison/releveur de coordonnées comprend une extension 242 de signature de flux d'instructions (ISS) qui peut produire un fichier 247 de table de 10 correspondance en option. A l'exception des extensions 212 et 242 se rapportant à une signature d'instruction dans le compilateur 210 et de l'élément de liaison/releveur de coordonnées 242 respectivement, l'environnement de 15 compilation et de liaison est sensiblement égal à un flux constitué de manière standard jusqu'au point indiqué par la ligne horizontale en tirets à la figure 2. L'image 246 ELF contient encore les réserves se rapportant à une signature d'instruction insérée par le 20 module 212 de compilateur. Afin de transformer ces réserves en des instructions utiles ou en des données pour le processeur sur lequel passera finalement le programme, un générateur 250 d'instruction de signature traite l'image 246 ELF pour créer une image 256 ELF 25 modifiée. Dans l'image 256 ELF modifiée, les réserves se rapportant à une signature d'instruction ont été remplacées par des valeurs de signature qui correspondent au point du programme, c'est-à-dire à l'emplacement de signature où se produit la réserve. Le générateur 250 30 d'instruction (désigné aussi par "vérificateur (statique) de code") recherche les réserves dans le code compilé. En outre, le générateur 250 de signature d'instruction peut effectuer une analyse de bloc de base et une analyse de trajet par défaut, afin de trouver par quelle séquence d'instruction le point du programme de la réserve peut être atteint, puisque ceci détermine la valeur de la signature au point du programme. En variante, le générateur 250 de signature d'instruction peut recevoir une information correspondante de bloc de base et de trajet par défaut, par exemple du compilateur 210 ou de l'élément de liaison/releveur de coordonnées 240 sous la forme d'un fichier 214 de liste ou d'un fichier 247 de table de correspondance. Sur la base de l'analyse ou de l'information du bloc de base et du trajet par défaut et d'une valeur de signature initiale, le générateur 250 de signature d'instruction peut alors déterminer les valeurs de signature de référence au point du programme où les réserves se produisent. Le générateur 250 de signature d'instruction peut "passer à travers" l'image 246 ELF d'une réserve à une autre dans l'ordre où elle peut être exécutée lorsque le programme passe, afin de trouver quelles instructions sont effectuées entre deux points de programme de réserve, si l'on prend le trajet par défaut ou un trajet qui n'est pas par défaut (s'il est présent). Dans l'image 256 ELF sortie par le générateur 250 d'instruction de signature, les réserves ont été remplacées par les valeurs de signature calculées par le générateur 250 de signature d'instruction.
L'image 256 ELF modifiée est envoyée à un post- releveur de coordonnées 260 qui crée une image 266 ELF physique et/ou un fichier 267 hexadécimal. En outre, le post-releveur de coordonnées 260 peut utiliser une ou plusieurs images 262 ELF supplémentaires, une configuration 263 dérivée et une configuration 264 de projet facultative. Eventuellement, le post-releveur de coordonnées 260 peut sortir un fichier 265 de correspondance. L'image 266 ELF physique ou le fichier 267 hexadécimal peut être exécuté sur un processeur 270, qui prend en charge un suivi de signature d'instruction. Dans la variante, l'image 266 ELF physique ou le fichier 267 hexadécimal peut être exécuté sur un simulateur (il n'est pas représenté. La fonctionnalité de base du compilateur de signature a été décrite brièvement ci-dessus. D'un manière plus détaillée, le compilateur de signature effectue les actions typiques d'un compilateur standard complétées par des actions spécifiques aux modes de réalisation décrits dans le présent exposé. Pendant une action d'analyse syntaxique et d'analyse de syntaxe/grammaire, une action supplémentaire de reconnaissance de pragmas particuliers et de mots-clés est effectuée. Des exemples de mots-clés possibles sont : ISS ON (début du segment ISS) ISS OFF (fin du segment ISS) ISS START (active l'ISS, c'est-à-dire fait que le module d'ISS des processeurs commence à sommer les instructions exécutées dans le registre de signature) ISS STOP (désactive l'ISS) ISS CHECK (vérifie la signature d'ISS) ISS STATUS (vérifie la cohérence d'ISS) ISS SUSPEND (suspension de l'ISS, par exemple dans le cas d'un appel de fonction) ISS RESUME (reprise d'ISS, par exemple lorsque le programme revient d'un appel de fonction à la fonction appelante) ISS SUSPENDRESTART (manipulation d'interruption d'ISS) Les pragmas ou mots-clés peuvent être résolus en fonctions de bibliothèque. On peut prévoir ainsi les fonctions de bibliothèque suivantes : void FCT ISS Start(const ref) Cette fonction charge la valeur du paramètre ref dans le registre d'ISS DATA. Ecrire dans le registre ISS DATA fixe ainsi la valeur présente de la signature au nouvel argument ref, en écrasant la valeur précédente. En revanche, écrire le registre ISSUPDATE effectue un changement incrémental de la signature présente. Ensuite, la fonction permet le suivi de la signature de flux d'instruction (par exemple, en fixant un bit correspondant dans un registre ISS CTRL). void FCT ISS Stop() Cette fonction arrête le suivi de la signature de flux d'instruction. void FCT ISS Check(const ref) - Cette fonction vérifie pendant . la durée d'exécution du programme que la valeur présente ISS DATA mémorisée dans le registre ISS DATA est celle à laquelle on s'attend, c'est-à-dire est égale à la valeur du paramètre ref, qui a été pendant le temps de compilation du programme déterminée par le générateur de signature d'instruction et insérée au point approprié, respectivement entrée dans une table référencée de valeurs. Si la valeur présente ISS DATA s'écarte de la valeur du paramètre ref constant, une action de sécurité est déclenchée. C'est ainsi, par exemple, que le générateur de signature d'instruction peut insérer la valeur pour le paramètre ref constant en un point en amont d'un point d'une instruction de saut, en faisant que le processeur saute à la première instruction de la fonction FCT ISS Check, de sorte que la valeur à insérer fonctionne en tant que paramètre ref de la fonction. C'est ainsi, par exemple, que si par définition un paramètre de fonction est placé dans un registre particulier du processeur, il suffit d'écrire la valeur déterminée par le générateur de signature d'instruction dans le registre avant l'instruction de saut. void FCT ISS Status() Cette fonction vérifie les contenus du registre ISS DATA. Dans le cas où une incohérence est détectée, une action de sécurité est déclenchée.
Cette fonction est utilisée typiquement dans la région où ISS est arrêté et vérifie si la valeur du registre ISS DATA correspond à une valeur constante magique. On peut ainsi vérifier si la région protégée par ISS a été quitté incorrectement, par exemple en sautant la fonction ISS STOP(). On notera que le ISS STOP() quitte le domaine d'ISS avec une valeur constante magique. void FCT ISS Suspend() Cette fonction sauvegarde les contenus présents des registres ISDATA et ISS STATUS, par exemple sous la forme de variables locales dans la mémoire de travail. Plus précisément, la fonction retrouve les valeurs présentes des registres ISS DATA et ISS STATUS en tant qu'une seule valeur en nombre entier (d'autres formats sont possibles tout aussi bien), qui peut alors être sauvegardée dans la mémoire de travail. Ensuite, le suivi de la signature du flux d'instruction est arrêté. void FCT ISS SuspendRestart(const ref) Cette fonction est similaire à la fonction FCT ISS Suspend() précédente. Elle sauvegarde ainsi également les contenus présents des registres ISS DATA et ISS STATUS et arrête le suivi de la signature de flux d'instruction. En outre, la valeur du paramètre ref est chargée en tant que valeur de mise à jour au sommet de la valeur présente ISS DATA. void FCT ISS Resume(save) - Cette fonction est la contrepartie des deux fonctions FCT ISS Suspend et FCT ISS Suspend introduites précédemment. La fonction FCT ISS Resume arrête le suivi de la signature du flux d'instruction et restaure les registres ISS DATA et ISS CTRL, par exemple à .partir de variables mémorisées précédemment dans la mémoire de travail. Les valeurs des registres ISS DATA et ISS CTRL mémorisées par exemple dans la mémoire de travail sont entrées dans la fonction sous la forme du paramètre unique save. Ces fonctions de bibliothèque procurent la fonctionnalité dont on a besoin pour prendre en charge la signature du flux d'instruction. En outre, la plupart des programmes utilisent des bibliothèques (standard) pour des fonctions utilisées souvent. Ces bibliothèques standard ne fournissent pas typiquement de suivi de signature de flux d'instruction, de sorte que l'invocation d'une fonction non protégée dans l'une des bibliothèques standard pourrait se traduire par une erreur non détectée et, en conséquence, une interruption de sécurité. C'est pourquoi on a besoin d'un deuxième jeu de bibliothèque de temps d'exploitation compilé avec une prise en charge d'une signature de flux d'instruction, si on souhaite une couverture plus complète, y compris des appels de bibliothèque en temps d'exploitation. L'élément de liaison/releveur de coordonnées est commandé au moyen d'une information de commande de signature produit par le compilateur de signature (compilateur 210 et module 212 de compilateur) et/ou par le générateur 250 de signature d'instruction, de manière que l'élément de liaison/releveur de coordonnées au sein des segments de code à protection de signature d'instruction utilise des fonctions de bibliothèque à signature d'instruction protégée. En particulier, l'identificateur d'élément de langage peut être configuré pour identifier un segment de code de programme protégé, pour lequel la prise en charge d'une signature d'instruction est validée. Le module de compilateur peut comprendre, en outre, un collecteur d'information d'appel de bibliothèque configuré pour recueillir une information d'appel de bibliothèque se rapportant à des appels de bibliothèque de de logiciel se produisant dans le segment de code de programme protégé et pour fournir l'information d'appel de bibliothèque en vue de l'utiliser pendant une opération de liaison venant ensuite. Le compilateur 210 effectue typiquement une analyse de bloc de base. De préférence, le compilateur 210 effectue aussi une analyse de trajet par défaut. En tant qu'action supplémentaire, le module 212 de compilateur peut insérer des instructions de signature implicites suivant des règles pour : a) faire pendant l'élément de boucle ; b) élément pendant que la boucle se fait ; c) élément si alors autrement ; d) divers éléments de commutation multiples. Ces insertions sont effectuées dans les segments de code marqués comme protégés par signature d'instruction (par exemple, segments de code entre les mots-clés ISS ON et ISS OFF). L'identificateur 213 d'élément de langage peut être configuré pour identifier un début et une fin d'un segment de code de programme protégé dans le code source de langage de niveau, pour lequel le support de signature d'instruction est validé. Le composant d'insertion de réserve peut être configuré pour utiliser un résultat d'une identification correspondante .de segment protégé afin d'activer l'insertion de la au moins une réserve se rapportant à une signature d'instruction dans le segment de code de programme protégé et de la désactiver dans un segment de code de programme non protégé. Une action supplémentaire effectuée par le module 212 de compilateur (ou par le compilateur 210 sur invitation correspondante du module 212 de compilateur) est l'insertion d'instruction de signature explicite en des points de programme définis par des pragmas.et/ou par des mots-clés : a) mettre ISS(ISS START) (voir aussi ci-dessus) b) arrêter ISS(ISS STOP) (voir aussi ci-dessus) c) vérification de signature ISS d) sous fonction e) points d'entrée pour des sous fonctions (ISSUPDATE) Un autre point affectant le compilateur 210 est l'optimisation que le compilateur typique effectue lorsqu'il compile un code. En particulier, les deux 20 situations suivantes peuvent exiger une adaptation du comportement d'optimisation du compilateur 210 optimisation d'invariants de boucle et appels de fonction ISS. En ce qui concerne l'optimisation d'invariants de 25 boucle, le compilateur 210 peut arriver à la conclusion qu'une réserve se rapportant à une signature d'instruction dans une boucle n'est apparemment pas affectée par la boucle et pourrait en fait se déplacer en face de la boucle afin de réduire le nombre de 30 "executions" de la réserve. Mais dans ce cas, la réserve ne doit pas être optimisée, mais reste dans la boucle, puisque chaque itération de la boucle constitue un nouveau branchement conditionnel.
Certaines des fonctions ISS sont un paramètre, qui est placé par le générateur 250 de signature d'instruction. Le générateur 250 de signature d'instruction assume le code suivant (traduit en langage d'assembleur) : - MOWV<Rd<,#<const> - BL FCT ISS Start MOVW déplace la valeur constante de mot #<const> vers le registre Rd. Puis, en utilisant l'instruction "BL FCT ISS Start", le programme saute (inconditionnellement) à l'étiquette FCTISSStart. Ces deux instructions doivent typiquement être atomiques et, en particulier, il faut produire une instruction MOVW indépendante de la longueur du paramètre. En ce qui concerne l'optimisation de code, le composant 215 d'insertion de réserve peut être configuré pour vérifier si une optimisation de code du compilateur 210 entre en conflit avec la au moins une réserve se rapportant à une signature d'instruction. Après vérification ou détermination d'un conflit, on peut empêcher le compilateur 210 d'effectuer une optimisation du code compilé, qui affecte la au moins une réserve se rapportant à une signature d'instruction. Pour faciliter le placement d'ISS et le calcul d'une valeur de référence, le compilateur/élément de liaison 210/240 fournira de l'information supplémentaire dans une section debug info DWARF du fichier 246 (.elf) : - information sur ce qui est code ou const ; - information sur l'endroit où ISS est validée, par exemple, par a#pragma FCT ISS ON ; - liste de toutes les réserves et des adresses correspondantes ; - information où des appels de plaquage sont insérés (appels impliquant plusieurs instructions de branchement venant ensuite) ; - information sur une commutation en plusieurs langages machine ; - information sur une optimisation de queue (une fonction se transforme en une autre) ; - information sur une dimension de table dans des commutateurs multiples utilisant des instructions de table de branchement, qui sont disponibles dans plusieurs architectures (par exemple, instruction TBB) ; - plage d'adresse de zones de code ; - plage d'adresse de sones où un suivi de signature d'instruction est validé (par exemple, .pour les fonctions de bibliothèque correcte à utiliser pendant une liaison) ; - adresse de (toutes) les insertions de réserve ; - information sur un pointeur de fonction ; - information sur les fonctions ; - information (d'adresse) sur les fins de fonctions ; - information sur un cas de commutation. Pour être apte à fournir l'information supplémentaire de signature de flux d'instruction, l'élément 240 de liaison doit être étendu (par exemple, au moyen de l'extension 242) pour fournir les adresses nécessaires, par exemple pour la liste de réserve. La figure 3 est un schéma fonctionnel illustrant une interaction entre un compilateur 210 (standard) et un module 212 de compilateur pour une prise en compte de signature d'instruction. Comme dans la figure 2, le compilateur 210 reçoit un code 202 source comprenant une pluralité d'éléments de langage, tels que prévus pour le langage de programmation de haut niveau utilisé pour le code source. Certains des éléments de langage sont pertinents pour la prise en compte de la signature d'instruction, tels que des branchements conditionnels, 5 des appels de fonction (en particulier, des fonctions pour lesquelles l'adresse de fonction n'est pas connue pendant le temps d'exploitation), et des éléments de langage dédiés se rapportant à une signature d'instruction, pour commander et vérifier les signatures 10 d'instruction pendant le temps d'exploitation du programme. On peut faire passer les éléments de langage du compilateur 210 au module 212 de compilateur, qui peut vérifier si l'élément de langage donne lieu à une 15 insertion d'une réserve se rapportant à une signature d'instruction. A cet effet, le module 212 de compilateur comprend un identificateur 213 d'élément de langage. Dans le cas où un élément de langage pertinent pour une signature d'instruction a été détecté, l'identificateur 20 213 d'élément de langage peut informer un composant 215 d'insertion d'une réserve. En particulier, l'identificateur 213 d'élément de langage peut fournir de l'information sur l'endroit où l'élément de langage pertinent pour une signature est placé dans le fichier 25 source (par exemple, au moyen d'un numéro de ligne) et sur le type de l'élément de langage pertinent pour une signature. Outre l'insertion automatique de réserve pertinente pour une signature d'instruction, le compilateur 210 30 et/ou le module 212 de compilateur peut être prévu, en outre, pour une adaptation de la génération de code standard pour maintenir les réserves en la bonne position. De plus, le compilateur 210 et/ou le module 212 de compilateur peuvent fournir de l'information supplémentaire pour que le générateur 250 de signature d'instruction soit plus fiable. Si possible, l'extension du compilateur 210 afin d'ajouter au compilateur 210 une prise en compte d'une signature d'instruction doit avoir un impact minimum sur la production de code et le code de langage de haut niveau doit travailler sans adaptation spéciale de code, outre l'utilisation de fonctions de bibliothèque de signature de flux d'instruction. Le compilateur 210 et/ou le module 212 de 10 compilateur peuvent faire une vérification de base de la syntaxe pour les fonctions de bibliothèque ISS. On peut vérifier les règles suivantes : - FCT ISS Start() est suivi de FCT ISS Stop() dans le flux de code de l'un des fichiers source ; 15 - FCT ISS Suspend() et FCT ISS SuspendRestard() sont suivis de FCT ISS Resume() ; - seul l'un de FCT ISS Resume() est autorisé pour un FCT ISS Suspend() ou un FCT ISS SuspendRestart() correspondant. 20 Le composant 215 d'insertion de réserve peut alors déterminer une réserve à insérer dans le code 222 ou 246 compilé. C'est ainsi, par exemple, que le composant 215 d'insertion de réserve peut déterminer la valeur (binaire) de la réserve, sa dimension et son emplacement 25 exact (en amont, en aval ou dans la ou les instruction(s) standard du code compilé produit par le compilateur 210 en réaction à l'élément de langage pertinent pour une signature d'instruction). On peut ensuite retourner cette information de réserve au compilateur 210, qui l'utilise 30 pour l'insérer dans le code compilé. La compilation du code 202 source et l'insertion des réserves pertinentes pour une signature d'instruction peuvent s'effectuer pas-à-pas, c'est-à-dire au fur et à mesure que l'opération de compilation progresse de nouvelles réserves sont insérées au point de programme pris en considération présentement par le compilateur 210. Dans le code 222 ou 246 compilé, la réserve est insérée dans le reste du code compilé, en particulier 5 dans les instructions compilées standard. Pour les fonctions et les séquences de codes comprises par des mots-clés ou des pragmas indiquant le début et la fin de parties validées par ISS du code, le compilateur 210 peut insérer automatiquement des réserves 10 pertinentes .pour une signature d'instruction suivant certaines règles de base décrites ci-dessous. Pour des séquences de code conditionnel, l'insertion automatique peut être comme il suit : pour traiter un trajet par non-défaut, le compilateur 210 doit insérer 15 une réserve. se rapportant à une signature d'instruction pour chaque instruction conditionnelle. Toutes les séquences conditionnelles (si alors autrement, cas de commutation, pendant une boucle, le faire pendant une boucle, etc.) peuvent être réduites à deux cas de base, 20 qui doivent être identifiés par le compilateur 210 ou par le module 212 de compilateur et traités différemment. Il n'est pas nécessaire que le compilateur 210 ou le module 212 de compilateur fasse une analyse de trajet par défaut. Le compilateur 210 ou le module 212 de 25 compilateur peut ajouter des réserves se rapportant à une signature d'instruction dans tous les trajets conditionnels. Dans le cas de réserves se rapportant à une signature d'instruction qui ne sont pas nécessaires, le générateur 250 de signature d'instruction peut les 30 placer avec des NOPs (pas d'opérations); Une règle générale peut être que le compilateur 210 ou le module 212 de compilateur ait à insérer une réserve en face de l'instruction suivante exécutée après un saut conditionnel. Mais pour un faire pendant une boucle, le - compilateur 210 ou le module 212 de compilateur doit insérer la réserve directement à l'étiquette du saut conditionnel (le bord arrière du graphe de flux de commande).
Le module 212 de compilateur peut comprendre, en outre, une interface de base de données configurée pour s'enquérir auprès d'une base de données comprenant une pluralité d'éléments de langage possibles pertinents pour une signature d'instruction et des réserves correspondantes se rapportant à une signature d'instruction à utiliser par l'identificateur d'élément de langage et par le composant d'insertion de réserve. La base de données pourrait aussi faire partie du module 212 de compilateur. La masse de données peut comprendre au moins une règle d'insertion (typiquement une pluralité de règles d'insertion) pour commander le composant d'insertion de réserve en ce qui concerne l'insertion de la au moins une réserve se rapportant à une signature d'instruction.
La figure 4 illustre comment un élément de langage pertinent pour une signature d'instruction est traité par l'opération en deux stades comprenant compiler le code 202 source et calculer les signatures d'instruction. L'élément de langage pertinent pour une signature d'instruction peut correspondre à plusieurs instructions dans le code compilé (cinq instructions dans l'exemple illustré). Le compilateur 210 avec le module 212 de compilateur est configuré pour insérer une réserve pertinente pour une signature d'instruction dans le code 222 compilé. Comme on peut le voir, la réserve est insérée entre la troisième et la quatrième instruction, qui peuvent être définies dans une base de données de règles d'insertion de réserve utilisée par le composant 215 d'insertion de réserve (voir la figure 4). En outre, le composant 215 d'insertion de réserve peut faire que le compilateur 210 insère une ou plusieurs instructions standard, par exemple comme pour charger une valeur constante dans un registre du processeur, telle que la 5 valeur de signature calculée ultérieurement par le générateur 250 de signature d'instruction. Le code 222 compilé avec la ou les réserves insérées représentent une structure de données d'interface de compilateur reliant le compilateur augmenté de la signature d'instruction et 10 la production. ultérieure de signature d'instruction. Le générateur 250 de signature d'instruction est configuré pour détecter la réserve et pour déterminer la valeur de signature appropriée qui est alors insérée dans le code 222 compilé à l'emplacement de la réserve. Le 15 générateur 250 de signature d'instruction sort le code 222 compilé avec les signatures 256 d'instruction. La figure 5 représente un schéma fonctionnel d'un générateur 250 de signature d'instruction suivant un mode de réalisation. Le générateur 250 de signature 20 d'instruction comprend un identificateur 251 de réserve, un calculateur 253 de signature et un remplaceur 255 de réserve. L'identificateur 251 de réserve est configuré pour recevoir le code 222 ou 246 compilé (par exemple, code d'assembleur ou code machine) et pour rechercher les 25 configurations qui sont indicatrices d'une réserve. C'est ainsi, par exemple, que la réserve peut être un code d'opération qui n'est pas vraiment utilisé par le compilateur 210 ou par le processeur sur lequel le programme final est destiné à passer. Le code d'opération 30 invalide doit être éliminé avant l'exécution du programme sur le processeur afin d'éviter des erreurs de temps d'exploitation. L'identificateur 251 de réserve peut aussi, ou en variante, recevoir une information concise sur les réserves qui ont été insérées dans le code compilé fourni par le modulateur 212 de compilateur (voir figure 4), par exemple par l'intermédiaire d'une interface d'information de réserve. Lorsqu'elle est présente, l'interface d'information de réserve peut être configurée pour recevoir de l'information de réserve comprenant de l'information auxiliaire sur la réserve et pour fournir l'information auxiliaire au calculateur 253 de signature. L'information auxiliaire peut comprendre au moins l'un d'une dimension d'une table se rapportant à un point de branchement multiple au sein du code compilé d'une adresse de mémoire indiquant une fin d'une fonction d'une liste comprenant de l'information sur la au moins une réserve inséré dans le code compilé et sa position et d'une table d'adresse indiquant un début et une fin d'au moins un segment de code protégé au sein du code compilé pour lequel la prise en charge de la signature d'instruction est validée. Le calculateur 253 de signature est configuré pour utiliser la table d'adresse pour déterminer la valeur de signature.
Une fois qu'une réserve a été trouvée ou produite pour l'identificateur 251 de réserve, de l'information sur la réserve est envoyée au calculateur 253 de signature. Comme expliqué ci-dessus, le calculateur 253 de signature est configuré pour calculer la valeur vraie de signature pour l'emplacement de la réserve qui est traitée présentement. La valeur de signature peut être une valeur de début, une valeur de mise à jour, une valeur de référence comme décrit précédemment. Le calcul 253 de signature peut être configuré pour effectuer une analyse de bloc de base sur le code compilé sur la base de laquelle la valeur de signature est calculée. La valeur de signature déterminée par le calcul 253 de signature et l'information sur, par exemple, l'emplacement de la réserve est envoyée au remplaceur 255 de réserve qui est configuré pour effectuer le remplacement de la réserve par la valeur de signature calculée. Le segment de code compilé fourni ou produit par le remplaceur 255 de réserve occupe typiquement un espace dans le code compilé qui est égal à un espace occupé par la réserve se rapportant à une signature d'instruction. Le segment de code compilé peut comprendre une instruction de processeur. Le remplaceur 255 de réserve peut être configuré pour sélectionner une instruction .de processeur particulière parmi une pluralité d'instructions de processeur et pour produire le segment de code compilé sur la base de l'instruction de processeur particulière. La figure 6 représente un organigramme schématique d'un procédé. suivant un mode de réalisation qui est utilisé typiquement pour traiter de l'information pertinente pour une signature d'instruction pendant une opération de compilation d'un code source de langage de haut niveau.
A une action 602, un élément de langage' pertinent pour une signature d'instruction dans un code source de langage de haut niveau est identifié. Cela peut s'effectuer sur la base d'une identification de mots-clés ou de pragmas dans le code source de langage de haut niveau. Une interaction avec une opération de compilage est effectuée pendant une action 604 venant ensuite afin d'insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de langage pertinent pour une signature d'instruction dans un code compilé qui est traité présentement (ou qui a déjà été traité) par une opération de compilation. Bien que certains aspects aient été décrits dans le contexte d'un dispositif, ces aspects représentent aussi une description du procédé correspondant, dans lequel un bloc ou un dispositif correspond à un stade de procédé ou à une caractéristique d'un stade de procédé. D'une manière analogue, des aspects décrits dans le contexte d'un stade de procédé représentent aussi une description d'un bloc ou d'un objet d'une caractéristique correspondante d'un dispositif correspondant. Certains des stades de procédé ou tous les stades de procédé peuvent être exécutés par ou en utilisant un dispositif matériel, comme par exemple un microprocesseur, un ordinateur programmable ou un circuit électronique. Dans certains modes de réalisation, certains ou plusieurs des stades de procédé les plus importants peuvent être exécutés par un dispositif de ce genre.
Suivant certaines exigences de mise en oeuvre, des modes de réalisation de l'invention peuvent être mis en oeuvre en matériel ou en logiciel. La mise en oeuvre peut être effectuée en utilisant un support de mémorisation numérique, par exemple un disque souple, un DVD, un Blue- Ray, un CD, une ROM, une PROM, une EPROM, une EEPROM ou une mémoire FLASH, ayant des signaux de commande pouvant être lus électroniquement qui y sont mémorisés, qui coopèrent (ou qui son aptes à coopérer) avec un système informatique programmable tel que le procédé respectif est effectué. Le support de mémorisation numérique peut être lu par un ordinateur. Certains modes de réalisation comprennent un support de données ayant des signaux de commande pouvant être lus électroniquement, qui sont capables de coopérer avec un système d'ordinateur programmable, tel que l'un des procédés décrits dans le présent exposé est effectué. En général, les modes de réalisation suivant l'invention peuvent être mis en oeuvre sous la forme d'un produit de programme informatique ayant un code de programme, le code programme fonctionnant pour effectuer l'un des procédés lorsque le produit du programme informatique passe sur un ordinateur. Le code de programme peut être, par exemple, mémorisé sur un support pouvant être lu par une machine. D'autres modes de réalisation comprennent le programme informatique pour effectuer l'un des procédés décrits suivant l'invention mémorisé sur un support pouvant être lu par une machine.
En d'autres termes, un mode de réalisation est donc un programme informatique ayant un code de programme pour effectuer l'un des procédés suivant l'invention, le programme informatique passant sur un ordinateur. Un autre mode de réalisation est donc un support de 15 données (ou un support de mémorisation numérique, ou un support pouvant être lu par un ordinateur) comprenant, enregistré sur celui-ci, le programme informatique pour effectuer l'un des procédés suivant. l'invention. Le support de données, le support de mémorisation numérique 20 ou le support enregistré sont typiquement tangibles et/ou non transitoires. Un autre mode de réalisation est donc un flux de données ou une séquence de signaux représentant le programme informatique pour effectuer l'un des procédés 25 suivant l'invention. Le flux de données ou la séquence de signaux peut être, par exemple, configuré pour être transféré par une connexion de communication de données, par exemple par l'Internet. Un autre mode de réalisation comprend un moyen de 30 traitement, par exemple un ordinateur ou un dispositif logique programmable, configuré ou adapté pour effectuer l'un des procédés suivant l'invention.
Un autre mode de réalisation comprend un ordinateur sur lequel est installé le programme informatique pour effectuer l'un des procédés suivant l'invention. Un autre mode de réalisation comprend un dispositif 5 ou un système configuré pour transférer (par exemple, électroniquement ou optiquement) un programme informatique pour effectuer l'un des procédés suivant l'invention et un récepteur. Le récepteur peut être, par exemple, un ordinateur, un dispositif mobile, un 10 dispositif de mémoire ou analogue. Le dispositif ou système peut comprendre, par exemple, un serveur de fichier pour transférer le programme informatique au récepteur. Dans certains modes de réalisation, un dispositif 15 logique programmable (par exemple, un circuit logique compleXe pouvant être programmé par l'utilisateur) peut être utilisé pour effectuer tout ou partie des fonctionnalités des procédés décrits suivant l'invention. Dans certains modes de réalisation, un circuit logique 20 complexe programmable par l'utilisateur peut coopérer avec un microprocesseur afin d'effectuer l'un des procédés suivant l'invention. En général, les procédés sont effectués de préférence par un dispositif matériel. Des mots tels que "premier", "deuxième", et 25 analogue, sont utilisés aussi pour décrire divers éléments, régions, sections, etc. et ne doivent pas être considérés comme limitatifs. De mêmes mots se rapportent à de mêmes éléments dans toute la description. Tels qu'utilisés dans le présent mémoire, les mots 30 "ayant", "contenant", "incluant", "comprenant", et analogue, sont des mots ouverts qui indiquent la présence des éléments ou caractéristiques indiqués, mais n'excluent pas des éléments ou caractéristiques supplémentaires. Les articles indéfinis et définis sont destinés à englober tant le pluriel que le singulier, sauf si le contexte indique clairement qu'il en va autrement. Il va de soi que les caractéristiques des divers 5 modes de réalisation décrits peuvent être combinées l'une à l'autre, sauf mention contraire express. Bien que l'on ait illustré des modes de réalisation précis, il va de soi pour l'homme du métier que l'on peut remplacer les modes de réalisation précis représentés et 10 décrits par diverses variantes et modes de réalisation équivalents, sans sortir de la portée de la présente invention. Cette demande vise à couvrir toutes adaptations ou variations des modes de réalisation précis mentionnés.

Claims (30)

  1. REVENDICATIONS1. Module (212) de compilateur pour fournir une prise en charge d'une signature d'instruction à un compilateur (210), le module (212) de compilateur étant caractérisé en ce qu'il comprend : un identificateur (213) d'élément de langage configuré pour identifier un élément de langage pertinent pour une signature d'instruction dans un code source de 10 langage de haut niveau fourni au compilateur (210) ; et un composant (215) d'insertion de réserve configuré pour interagir avec le compilateur (210) pour insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de 15 langage se rapportant à une signature d'instruction dans un code compilé traité par le compilateur (210) sur la base du code source de langage de haut niveau.
  2. 2. Module de compilateur suivant la revendication 1, 20 caractérisé en ce que l'insertion de la réserve se rapportant à une signature conserve une fonction logique du code de langage de haut niveau d'origine donnée au compilateur. 25
  3. 3. Module de compilateur suivant la revendication 1 ou 2, caractérisé en ce qu'il comprend une interface de base de données configurée pour interroger une base de données comprenant une pluralité d'éléments de langage possible pertinente pour une signature d'instruction etdes réserves correspondantes se rapportant à une signature d'instruction à utiliser par l'identificateur d'éléments de langage et par le composant d'insertion de réserve.
  4. 4. Module de compilateur suivant la revendication 3, caractérisé en ce que la pluralité d'éléments de langage possible pertinente pour une signature d'instruction comprend au moins l'un d'un saut conditionnel, d'un élément si alors, d'un élément de cas de commutation, d'un élément de pendant une boucle, d'un élément fait pendant et d'un mot-clé dédié se rapportant à une signature d'instruction.
  5. 5. Module de compilateur suivant la revendication 3 ou 4, caractérisé en ce que la base de données comprend, en outre, au moins une règle d'insertion pour commander le composant d'insertion de réserve en ce qui concerne l'insertion de la au moins une réserve se rapportant à une signature d'instruction.
  6. 6. Module de compilateur suivant l'une quelconque des revendications précédentes, caractérisé en ce que le code compilé est un code en langage machine et le composant d'insertion de réserve est configuré pour sélectionner la au moins une réserve se rapportant à une signature d'instruction, de manière à ce qu'une dimension de la au moins une réserve se rapportant à une signature d'instruction soit égale au moins à une dimension d'une instruction en langage machine ou d'une séquence d'instruction en langage machine remplaçant finalement la au moins une réserve se rapportant à une signature d'instruction dans le code compilé.
  7. 7. Module de compilateur suivant l'une quelconque des revendications précédentes, caractérisé en ce que la au moins une réserve se rapportant à une signature d'instruction est l'une d'une réserve pour une valeur de signature de référence et d'une réserve pour une instruction se rapportant à une signature d'instruction.
  8. 8. Module de compilateur suivant l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend, en outre, un collecteur d'information. de réserve configuré pour collecteur une information de réserve sur des réserves se rapportant à une signature d'instruction insérée dans le code compilé et pour sortir l'information de réserve.
  9. 9. Mbdule de compilateur suivant l'une quelconque des revendications précédentes, caractérisé en ce que l'identificateur d'élément de langage est configuré pour identifier un segment de code de programme protégé pour lequel la prise en charge de la signature d'instruction est validée et le module de compilateur comprend, en outre, un collecteur d'information d'appel de bibliothèque configuré pour collecter de l'information d'appel de bibliothèque se rapportant à des appels de bibliothèque logiciel se produisant dans le segment de code de programme protégé et pour fournir l'information d'appel de bibliothèque en vue de l'utiliser pendant une opération de liaison venant ensuite.
  10. 10. Module de compilateur suivant l'une quelconque des revendications précédentes, caractérisé en ce que l'identificateur d'élément de langage est configuré pour identifier un début et une fin d'un segment de code de programme protégé dans le code source en langage de hautniveau, pour lequel la prise en charge d'une signature d'instruction est validée et le composant d'insertion de réserve est configuré pour utiliser un résultat d'une identification de segment protégé correspondant afin 5 d'activer l'insertion de la au moins une réserve se rapportant à une instruction dans le segment de code .programme protégé et de désactiver l'insertion de la au moins une réserve se rapportant à une signature d'instruction dans un segment de code de programme non 10 protégé.
  11. 11. Module de compilateur suivant l'une quelconque des revendications précédentes, caractérisé en ce que le composant d'insertion de réserve est configuré, en outre, 15 pour vérifier si. une optimisation de code du compilateur entre en conflit avec la au moins une réserve se rapportant à une signature d'instruction et, après vérification d'un conflit, pour empêcher le compilateur d'effectuer une optimisation du code compilé qui affecte 20 la au moins une réserve se rapportant à une signature d'instruction.
  12. 12. Générateur (250) de signature d'instruction, caractérisé en ce qu'il comprend : 25 une entrée pour un code compilé ; un identificateur (251) de réserve configuré pour identifier une réserve se rapportant à une signature d'instruction dans le code compilé ; un calculateur (253) de signature configuré pour 30 déterminer une valeur de signature pour un point de programme dans le code compilé où la réserve se rapportant à une signature d'instruction se produit ; etun remplaceur (255) de réserve configuré pour insérer un segment de code compilé sur la base de la valeur de signature au point de programme.
  13. 13. Générateur de signature d'instruction suivant la revendication 12, caractérisé en ce que le code compilé est l'un d'un code en langage machine et d'un code d'assembleur.
  14. 14. Générateur de signature d'instruction suivant la revendication 12 ou 13, caractérisé en ce que le segment de code compilé produit par le remplaceur de réserve occupe un espace dans le code compilé qui est égal à un espace occupé par la réserve se rapportant à une signature d'instruction.
  15. 15. Générateur de signature d'instruction suivant l'une quelconque des revendications 12 à 14, caractérisé en ce que le segment de code compilé comprend une instruction de processeur et le remplaceur de réserve est configuré pour sélectionner une instruction particulière de processeur parmi une pluralité d'instructions de processeur et pour produire le segment de code compilé sur la base de l'instruction particulière de processeur.
  16. 16. Générateur de signature d'instruction suivant l'une quelconque des revendications 12 à 15, caractérisé en ce que le calculateur de signature est configuré pour effectuer une analyse de bloc de base sur le code compilé sur la base de laquelle la valeur de signature est calculée.
  17. 17. Générateur de signature d'instruction suivant l'une quelconque des revendications 12 à 16, caractériséen ce qu'il comprend, en outre, une interface d'information de réserve configurée pour recevoir de l'information de réserve comprenant de l'information auxiliaire sur la réserve se rapportant à la signature de l'instruction et pour fournir l'information auxiliaire au calculateur de signature.
  18. 18. Générateur de signature d'instruction suivant la revendication 17, caractérisé en ce que l'information auxiliaire comprend au moins l'un d'une dimension d'une table se rapportant à un point de branchement multiple dans le code compilé, d'une adresse de mémoire indiquant une fin d'une fonction, d'une liste comprenant une information sur la au moins une réserve se rapportant à une signature d'instruction insérée dans le code compilé et sa position et d'une table d'adresse indiquant un début et une fin d'au moins un segment de code protégé dans le code compilé, pour lequel la prise en charge d'une signature d'instruction est validée et le calculateur de signature est configuré pour utiliser la table d'adresse pour déterminer la valeur de signature.
  19. 19. Procédé de traitement d'une information pertinente pour une signature d'instruction pendant une opération de 25 compilation d'un code source en langage de haut niveau, procédé caractérisé en ce que : on identifie un élément de langage pertinent pour une signature d'instruction dans le code source en langage de haut niveau ; et 30 on interagit avec l'opération de compilation afin d'insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de langage pertinent pour une signature d'instruction dansun code compilé traité par l'opération de compilation sur la base du code source en langage de haut niveau.
  20. 20. Procédé suivant la revendication 19, caractérisé en ce que la réserve se rapportant à une signature est transparente à l'opération de compilation.
  21. 21. Procédé suivant la revendication 19 ou 20, caractérisé, en outre, en ce que : on interroge une base de données comprenant une pluralité d'éléments de langage possibles pertinents pour une signature d'instruction et des réserves correspondantes se rapportant à une signature d'instruction à utiliser pendant l'identification de l'élément de langage se rapportant à une signature d'instrudtion et pendant l'interaction avec l'opération de compilation.
  22. 22. Procédé suivant la revendication 21, caractérisé en ce que la pluralité d'éléments de langage possibles se rapportant à une signature d'instruction comprend au moins l'un d'un saut conditionnel, d'un élément si alors, d'un élément de cas de commutation, d'un élément pendant une boucle, d'un élément fait pendant et d'un mot-clé dédié se rapportant à une signature d'instruction.
  23. 23. Procédé suivant la revendication 21 ou 22, caractérisé en ce que la base de données comprend, en outre, une règle d'insertion pour commander l'insertion de la au moins une réserve se rapportant à une signature d'instruction.
  24. 24. Procédé suivant l'une quelconque des revendications 19 à 23, caractérisé en ce que le codecompilé est un code en langage machine et la au moins une réserve se rapportant à une signature d'instruction est sélectionnée, de manière à ce qu'une dimension de la au moins une réserve se rapportant à une signature d'instruction soit égale à une dimension d'une instruction en langage machine ou d'une séquence d'instruction en langage machine remplaçant finalement la au moins une réserve se rapportant à une signature d'instruction dans le code compilé.
  25. 25. Procédé suivant l'une quelconque des revendications 19 à 24, caractérisé en ce que la réserve se rapportant à une signature d'instruction est l'une d'une réserve pour une valeur de signature de référence, d'une réserve pour une valeur de mise à jour de signature et d'une réserve pour une instruction se rapportant à une signature d'instruction.
  26. 26. Procédé suivant l'une quelconque des revendications 19 à 25, caractérisé en ce qu'en outre : on recueille de l'information de réserve sur des réserves se rapportant à une signature d'instruction insérée dans le code compilé ; et on sort l'information de réserve.
  27. 27. Procédé suivant l'une quelconque des revendications 19 à 26, caractérisé en ce qu'en outre : on identifie un segment de code de programme protégé pour lequel la prise en charge d'une signature 30 d'instruction est validée ; on recueille de l'information d'appel de bibliothèque se rapportant à des appels de bibliothèque logiciels se produisant dans le segment de code de programme protégé ; eton fournit l'information d'appel de bibliothèque en vue de l'utiliser pendant une opération de liaison venant ensuite.
  28. 28. Procédé suivant l'une quelconque des revendications 19 à 27, caractérisé en ce qu'en outre : on identifie en tant qu'identification de segment protégé un début et une fin d'un segment de code de programme protégé dans le code source en langage de haut niveau pour lequel la prise en charge de la signature d'instruction est validée ; et on utilise un résultat de l'identification du segment protégé afin d'activer l'insertion de la au moins une réserve se rapportant à une signature d'instruction au sein du segment du code de programme protégé pour désactive.É l'insertion de la au moins une réserve se rapportant à une signature d'instruction. au sein du segment de code de programme protégé dans un segment de code de programme non protégé.
  29. 29. Procédé suivant l'une quelconque des revendications 19 à 28, caractérisé en ce qu'en outre : on vérifie si une optimisation de code de l'opération de compilation entre en conflit avec la au 25 moins une réserve se rapportant à une signature d'instruction et, après avoir trouvé un conflit, on empêche l'opération de compilation d'effectuer une optimisation du code compilé qui affecte la au moins une réserve se rapportant à une signature d'instruction. 30
  30. 30. Support de mémorisation numérique pouvant être exploitée par ordinateur et ayant mémorisé sur lui un programme informatique ayant un code de programme pour effectuer lorsqu'il passe sur un ordinateur un procédé detraitement d'une information pertinente pour une signature d'instruction pendant une opération de compilation d'un code source en langage de haut niveau, le procédé comprenant : identifier un élément de langage pertinent pour une signature d'instruction dans le code source en langage de haut niveau ; et interagir avec l'opération de compilation afin d'insérer au moins une réserve se rapportant à une signature d'instruction sur la base de l'élément de langage pertinent pour une signature d'instruction dans un code compilé traité par l'opération de compilation sur la base du code source en langage de haut niveau.
FR1201962A 2011-07-15 2012-07-11 Operation de compilation repartie avec prise en charge d'une signature d'instruction Active FR2982385B1 (fr)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/184,135 US8694977B2 (en) 2011-07-15 2011-07-15 Distributed compiling process with instruction signature support

Publications (2)

Publication Number Publication Date
FR2982385A1 true FR2982385A1 (fr) 2013-05-10
FR2982385B1 FR2982385B1 (fr) 2018-09-07

Family

ID=47425834

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1201962A Active FR2982385B1 (fr) 2011-07-15 2012-07-11 Operation de compilation repartie avec prise en charge d'une signature d'instruction

Country Status (4)

Country Link
US (1) US8694977B2 (fr)
CN (1) CN103019799B (fr)
DE (1) DE102012212343A1 (fr)
FR (1) FR2982385B1 (fr)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8997070B2 (en) * 2011-12-15 2015-03-31 Sap Se Extension mechanism for scripting language compiler
US9274931B2 (en) 2013-05-06 2016-03-01 International Business Machines Corporation Inserting implicit sequence points into computer program code to support debug operations
US10289808B2 (en) 2013-12-20 2019-05-14 Infineon Technologies Ag Method and system for secure data processing
CN105446705B (zh) * 2014-06-30 2019-06-21 国际商业机器公司 用于确定配置文件的特性的方法和装置
CN104539432B (zh) * 2014-12-31 2016-09-28 深圳市奇付通科技有限公司 一种对文件进行签名的方法和装置
US10044750B2 (en) 2015-01-16 2018-08-07 Microsoft Technology Licensing, Llc Code labeling based on tokenized code samples
US9547483B1 (en) * 2015-11-06 2017-01-17 International Business Machines Corporation Feedback directed optimized compiling of optimized executable code
US10705589B2 (en) * 2016-06-02 2020-07-07 Northwestern University System and method for associative power and clock management with instruction governed operation for power efficient computing
CN106055376A (zh) * 2016-06-03 2016-10-26 北京奇虎科技有限公司 一种实现ios分布式编译签名的方法和系统
US9720806B1 (en) * 2016-07-05 2017-08-01 Semmle Limited Generating stable file location identifiers for reference to locations in a file
US10572245B1 (en) * 2016-08-30 2020-02-25 Amazon Technologies, Inc. Identifying versions of running programs using signatures derived from object files
US9690690B1 (en) 2016-09-30 2017-06-27 Semmle Limited Scalable transitive violation matching
US10223507B2 (en) * 2016-10-28 2019-03-05 Infineon Technologies Ag Deterministic code fingerprinting for program flow monitoring
US10536168B2 (en) 2016-11-07 2020-01-14 Infineon Technologies Ag Program flow monitoring for deterministic firmware functions
US11531531B1 (en) 2018-03-08 2022-12-20 Amazon Technologies, Inc. Non-disruptive introduction of live update functionality into long-running applications
CN111078290B (zh) * 2019-12-17 2023-03-14 西安电子科技大学 一种用于可扩展指令集的编译器及编译方法
US20230169215A1 (en) * 2021-12-01 2023-06-01 International Business Machines Corporation Secure software compilation and software verification
CN115543342B (zh) * 2022-11-28 2023-03-24 天津华来科技股份有限公司 在编译时替换启动页面的方法、电子设备、存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5999732A (en) * 1998-03-23 1999-12-07 Sun Microsystems, Inc. Techniques for reducing the cost of dynamic class initialization checks in compiled code
US5983021A (en) * 1998-05-27 1999-11-09 Sun Microsystems Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US7472112B2 (en) * 2003-06-23 2008-12-30 Microsoft Corporation Distributed query engine pipeline method and system
US7389494B1 (en) * 2003-11-14 2008-06-17 Sun Microsystems, Inc. Mechanism for statically defined trace points with minimal disabled probe effect
US8412953B2 (en) * 2009-08-28 2013-04-02 Apple Inc System and method for annotation driven integrity verification

Also Published As

Publication number Publication date
FR2982385B1 (fr) 2018-09-07
CN103019799A (zh) 2013-04-03
DE102012212343A1 (de) 2013-01-17
CN103019799B (zh) 2016-08-17
US20130019231A1 (en) 2013-01-17
US8694977B2 (en) 2014-04-08

Similar Documents

Publication Publication Date Title
FR2982385A1 (fr) Operation de compilation repartie avec prise en charge d&#39;une signature d&#39;instruction
RU2582541C2 (ru) Контекстно-зависимое расслаивание для динамической параллелизации двоичных программ
US8966453B1 (en) Automatic generation of program execution that reaches a given failure point
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
US8612944B2 (en) Code evaluation for in-order processing
US7698697B2 (en) Transforming code to expose glacial constants to a compiler
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
US20040216095A1 (en) Method and apparatus for recovering data values in dynamic runtime systems
CN109324971B (zh) 一种基于中间语言和污点分析的软件数据流分析方法
FR2972545A1 (fr) Controle de flux d&#39;instruction commande par des instructions de programme
KR20080093108A (ko) 프로그램 병렬 실행 시스템 및 방법
US20190114159A1 (en) Performing a compiler optimization pass as a transaction
US10325844B2 (en) Modifying execution flow in save-to-return code scenarios
CN102566977B (zh) 字节码分支处理器及方法
CN116661808B (zh) 二进制翻译方法、装置、电子设备及存储介质
JP2009104252A (ja) デバッグ支援装置およびデバッグ支援方法
US9367553B2 (en) Computer file system traversal
US20220283927A1 (en) Compound conditional reordering for faster short-circuiting
CN113031956A (zh) 程序编译方法和装置以及程序运行方法和装置
US6976247B1 (en) Generating an executable file
FR3008504A1 (fr) Procede de fourniture d&#39;un code d&#39;instruction et circuit
CN106897051B (zh) 一种进程清理的方法及装置
US20180024823A1 (en) Enhanced local commoning
WO2023155863A1 (fr) Procédés et dispositifs de fusion de fonctions de compilateur
CN113220334B (zh) 程序故障定位方法、终端设备及计算机可读存储介质

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 4

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 9

PLFP Fee payment

Year of fee payment: 10

PLFP Fee payment

Year of fee payment: 11

PLFP Fee payment

Year of fee payment: 12