Question:
Quel est l'état de l'art de la décompilation infrarouge LLVM?
nneonneo
2013-03-31 13:27:01 UTC
view on stackexchange narkive permalink

LLVM IR est un bitcode typé de assez haut niveau qui peut être directement exécuté par LLVM et compilé en JIT à la volée. Cela ne me surprendrait pas si un nouveau format exécutable ou un nouveau langage de programmation était conçu directement sur LLVM, pour être exécuté comme s'il s'agissait d'un langage interprété.

À cet égard, je suis curieux de connaître l'état de l'art sur la décompilation LLVM. Puisqu'il s'agit d'un bitcode typé spécialement conçu pour être facile à analyser, on peut s'attendre à ce qu'il soit relativement facile à décompiler (ou au moins à réassembler sous une forme plus lisible ou plus logique).

La recherche sur Google apparaît cette thèse de BSc qui fait un travail relativement rudimentaire, mais apparemment peu d'autres pistes. J'aurais pu m'attendre à ce que le superviseur de ce boursier ait fait des recherches supplémentaires dans ce domaine, mais il semble qu'il se concentre davantage sur le domaine de la conception du compilateur.

Existe-t-il des projets de recherche , des prototypes commerciaux ou même des recherches actives dans le domaine de la décompilation LLVM?

Un répondre:
#1
+16
Andrew
2013-04-01 11:46:30 UTC
view on stackexchange narkive permalink

La décompilation est extrêmement simple. LLVM depuis longtemps livré avec un CBackend qui convertirait LLVM en C.

Le LLVM qui est créé par les frontends d'aujourd'hui (clang) est très propice à tout type d'analyse et de compréhension auquel vous pouvez penser. Vous pouvez donc probablement utiliser les outils LLVM normaux (opt, llc) pour "décompiler" l'IR. Je trouve LLVM IR tout à fait lisible en soi, mais je suis étrange.

Cependant, tout comme la compilation de C en assembleur, certaines informations sont perdues ou détruites. Les noms des champs de structure ont disparu, à jamais remplacés par des index. Leurs types restent cependant. Le flux de contrôle, en tant que concept, demeure, il n'y a pas de confusion entre le code et les données, mais les fonctions peuvent être supprimées parce qu'elles sont mortes ou intégrées. Je crois que les valeurs d'énumération sont également supprimées. Les informations sur les paramètres à fonctionner restent, tout comme les types de variables globales.

Il existe en fait un article décent dans lequel un contributeur LLVM décrit les pièges et les problèmes liés à l'utilisation de leur format de bitcode de la manière que vous suggérez. Beaucoup de gens semblent l'avoir écouté, donc je ne suis pas sûr si nous devrons un jour aller au-delà des outils dont nous disposons actuellement pour comprendre le bitcode LLVM ...

PNaCl utilise maintenant (un sous-ensemble réduit de) LLVM comme format. Ce n'est donc pas seulement un compilateur IR.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...