2010-04-15 10 views
6

Est-il possible d'utiliser LLVM pour exécuter des programmes x86? C'est à dire. Je veux utiliser llvm comme un simulateur x86 pour exécuter des programmes x86, puis instrumenter le programme x86.programme en cours d'exécution x86 _on_ LLVM

Merci!

+2

Pour citer Charles Babbage, « Je ne suis pas en mesure d'appréhender à juste titre le genre de confusion des idées qui pourraient provoquer une telle question. » –

+2

Bonne question! J'avais lu sur LibCPU il y a quelques semaines, mais complètement oublié. Cette question m'a incité à revenir en arrière et à le regarder à nouveau. Merci! –

Répondre

7

Je pense que vous cherchez LibCPU.

Il a an x86 frontend (bien, en fait seulement 8086 pour le moment, et ce n'est même pas complet, mais ils travaillent dessus), et puisqu'il est construit au-dessus de LLVM, il a évidemment aussi un backend x86 , permettant ainsi d'exécuter x86-on-x86 mais en passant par les étapes d'optimisation, d'instrumentation et d'analyse de LLVM.

+0

le LibCPU peut-il fonctionner pour le code 387 (FPU classique)? – osgx

1

En outre, il y avait un projet d'utiliser LLVM dans qemu. C'est aussi un moyen d'exécuter du code x86 via LLVM.

http://code.google.com/p/llvm-qemu/

Ce projet était GSoC, mais il y a un code dans svn et auteur des résultats:

regular qemu  llvm-qemu rle,dse,simple regalloc llvm-qemu full opts 
4m35.349s    5m39.697s      13m50.697s 

LLVM-qemu que qemu deux fois trois fois plus lent, mais cela fonctionne.

+1

Apparemment, il a été conçu comme moyen d'optimiser le qemu. Je suppose, la raison pour laquelle il a été abandonné était à cause de ces résultats décourageants. – TechZilla

0

Je ne sais pas libCPU, mais il y a libx86, qui fait quelque chose de très similaire; si elle fonctionne sur un processeur x86 32 bits (mais pas en mode 64 bits), elle exécute un processus 8086 virtuel, si elle s'exécute ailleurs, elle essaie d'émuler le 8086 dans le logiciel. Plutôt cool. La documentation est relativement rare cependant.

http://www.codon.org.uk/~mjg59/libx86/

Questions connexes