Théorie de la décompilation et applications industrielles

_____________________

E. Moretti, A. Osorio

Figure

Objet

Conception et mise en oeuvre d'un système informatique capable de << comprendre >> un code exécutable, généralement extrait d'un automate programmable, pour aboutir à une représentation formelle quelconque.

Description

Un système de décompilation est constitué de 3 modules / phases successifs :
la partie frontale, le décompilateur universel, et enfin, la partie terminale.
La conception de la partie frontale du système, qui assure l'interface entres les codes exécutables en provenance de toutes sortes de machines et le << décompilateur universel >>, est aujourd'hui achevée. A partir du code exécutable d'une machine, le module frontal génère une représentation dans un langage de bas niveau comprenant six instructions élémentaires paramétrables, et fournit au module qui lui succède une description du code sous forme d'un graphe de flot de contrôle. Le décompilateur universel est un module totalement indépendant de la machine d'où est extrait le code et également de la représentation finale que l'on veut obtenir, telle qu'une description en C. Les deux principales tâches que doit assumer le décompilateur universel sont l'analyse du flot de données et la structuration du graphe de flot de contrôle :

$\bullet$ L'analyse du flot de données est cruciale pour aboutir à une << bonne compréhension >> du code exécutable : elle vise à reconstruire des expressions de haut niveau par assemblage des instructions élémentaires du code. Pour y parvenir, les techniques traditionnelles d'optimisation de code, largement utilisées pour les compilateurs, se révèlent insuffisantes pour réussir la décompilation, du fait qu'un code exécutable ne fournit pas a priori d'informations précises sur le type des variables employées. Le travail consiste donc à mettre au point des techniques de typage des variables, le principal obstacle étant l'usage intensif de pointeurs, tableaux et autres structures de données complexes dans le code.

$\bullet$ Le graphe de flot de contrôle que l'on obtient à partir d'un code exécutable n'est composé en général que de sauts et d'appels de procédures. La structuration du graphe de flot de contrôle consiste à faire réapparaître des structures de haut niveau, telles que les boucles (for, while do et do while) et les conditions (if then et if then else).

Résultats et perspectives

D'une part, cette approche permettra d'implanter automatiquement le code, une fois reprogrammé, sur des machines différentes, notamment constituées de plusieurs processeurs, conduisant à un fonctionnement optimalisé de l'ensemble. D'autre part, le système informatique développé permettra l'adaptation automatique du code exécutable dans des postes de travail avancés, ainsi que des unités graphiques de visualisation, dont la conception est de plus en plus sophistiquée, et dont les performances ne sont presque jamais totalement exploitées par les logiciels graphiques d'aujourd'hui. Aussi, la représentation formelle obtenue pourra servir de base pour une analyse approfondie du code exécutable, en matière de sûreté de fonctionnement (preuve de programme) et de calcul de complexité algorithmique. Enfin, des applications directes sont envisagées dans l'Automobile, dans le domaine du Contrôle Moteur (mise au point).

Gpe Interaction et Multi-Modalités

Dpt CHM

+ Sommaire

Présentation

visiteurs.