Domanda:
Qual è lo stato dell'arte nella decompilazione IR LLVM?
nneonneo
2013-03-31 13:27:01 UTC
view on stackexchange narkive permalink

LLVM IR è un bitcode tipizzato di alto livello che può essere eseguito direttamente da LLVM e compilato in JIT al volo. Non mi sorprenderebbe se un nuovo formato eseguibile o linguaggio di programmazione fosse progettato direttamente sopra LLVM, da eseguire come se fosse un linguaggio interpretato.

A questo proposito, sono curioso dello stato dell'arte sulla decompilazione LLVM. Poiché si tratta di un codice bit tipizzato progettato specificamente per essere facile da analizzare, ci si potrebbe aspettare che sia relativamente facile da decompilare (o almeno riassemblare in una forma più leggibile o logica).

Il googling si presenta questa tesi di laurea che fa un lavoro relativamente rudimentale, ma apparentemente pochi altri indizi. Mi sarei aspettato che il supervisore di questo collega avesse svolto ulteriori ricerche in quest'area, ma sembra che si concentri maggiormente sull'area di ricerca del design del compilatore.

Ci sono progetti di ricerca , prototipi commerciali o anche qualsiasi tipo di ricerca attiva nel campo della decompilazione LLVM?

Una risposta:
#1
+16
Andrew
2013-04-01 11:46:30 UTC
view on stackexchange narkive permalink

È estremamente facile da decompilare. LLVM per molto tempo fornito con un CBackend che converteva LLVM in C.

L'LLVM creato dai frontend odierni (clang) è molto suscettibile di qualsiasi tipo di analisi e comprensione a cui puoi pensare. Quindi probabilmente puoi semplicemente usare i normali strumenti LLVM (opt, llc) per "decompilare" l'IR. Trovo LLVM IR abbastanza leggibile da solo, ma sono strano.

Tuttavia, proprio come la compilazione di C in assembler, alcune informazioni vengono perse o distrutte. I nomi dei campi della struttura sono spariti, sostituiti per sempre con gli indici. I loro tipi rimangono però. Il flusso di controllo, come concetto, rimane, non c'è confusione tra codice e dati, ma le funzioni possono essere rimosse perché sono morte o inline. Credo che anche i valori enum vengano rimossi. Le informazioni sui parametri per la funzione rimangono, così come i tipi di variabili globali.

Esiste effettivamente un post decente in cui un collaboratore di LLVM delinea insidie ​​e problemi con l'utilizzo del formato bitcode nel modo da te suggerito. Molte persone sembrano averlo ascoltato, quindi non sono sicuro che avremo mai bisogno di andare oltre gli strumenti che abbiamo attualmente per comprendere il bitcode LLVM ...

PNaCl ora utilizza (un sottoinsieme ridotto di) LLVM come formato. Quindi non è solo un compilatore IR.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...