Towards Modular Interpretive Decompilation of Low-Level Code to Prolog

Miguel Gómez‐Zamalloa, Elvira Albert, Germán Puebla · 2009

Decompiling low-level code to a high-level intermediate representation facilitates the development of analyzers, model checkers, etc. which reason about properties of the low-level code (e.g., bytecode,.NET). Interpretive decompilation consists in partially evaluating an interpreter for the low-level language (written in the high-level language) w.r.t. the code to be decompiled. There have been proofs-of-concept that interpretive decompilation is feasible, but there remain open issues when it comes to decompile a real language: does the approach scale up? is the quality of decompiled programs comparable to that obtained by ad-hoc decompilers? do decompiled programs preserve the structure of the original programs? This paper addresses these issues by presenting, to the best of our knowledge, the first modular scheme to enable interpretive decompilation of low-level code to a high-level representation. The proposed scheme ensures that: 1) each method/block is decompiled just once, and 2) each program point is traversed at most once during decompilation. 1

Read the paper · More papers on PaperTik