Communicating sequential processes
Communicating sequential processes
Structure and interpretation of computer programs
Structure and interpretation of computer programs
Attribute grammars as a functional programming paradigm
Proc. of a conference on Functional programming languages and computer architecture
Abstract interpretation of declarative languages
Abstract interpretation of declarative languages
Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
The verification of low-level code
Software Engineering Journal
Transputer instruction set: a compiler writer's guide
Transputer instruction set: a compiler writer's guide
Computability and logic: 3rd ed.
Computability and logic: 3rd ed.
The REDO compendium: reverse engineering for software maintenance
The REDO compendium: reverse engineering for software maintenance
The REDO compendium
The space shuttle primary computer system
Communications of the ACM
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Logic, Programming and PROLOG
An Approach to Verifiable Compiling Specification and Prototyping
PLILP '90 Proceedings of the 2nd International Workshop on Programming Language Implementation and Logic Programming
OPTVIEW: a new approach for examining optimized code
Proceedings of the 1998 ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
A Multiple-Clause Folding Rule Using Instantiation and Generalization
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
ACM Transactions on Design Automation of Electronic Systems (TODAES)
Decompilation of Java bytecode to Prolog by partial evaluation
Information and Software Technology
RTSS'10 Proceedings of the 21st IEEE conference on Real-time systems symposium
A Multiple-Clause Folding Rule Using Instantiation and Generalization
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
Obfuscation resilient binary code reuse through trace-oriented programming
Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security
Hi-index | 0.00 |
While a compiler produces low-level object code from high-level source code, a decompiler produces high-level code from low-level code and has applications in the testing and validation of safety-critical software. The decompilation of an object code provides an independent demonstration of correctness that is hard to better for industrial purposes (an alternative is to prove the compiler correct). But, although compiler compilers are in common use in the software industry, a decompiler compiler is much more unusual.It turns out that a data type specification for a programming-language grammar can be remolded into a functional program that enumerates all of the abstract syntax trees of the grammar. This observation is the springboard for a general method for compiling decompilers from the specifications of (nonoptimizing) compilers.This paper deals with methods and theory, together with an application of the technique. The correctness of a decompiler generated from a simple occam-like compiler specification is demonstrated. The basic problem of enumerating the syntax trees of grammars, and then stopping, is shown to have no recursive solution, but methods of abstract interpretation can be used to guarantee the adequacy and completeness of our technique in practical instances, including the decompiler for the language presented here.