Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
Partial evaluation in logic programming
Journal of Logic Programming
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
Tutorial on specialisation of logic programs
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Decompilation: the enumeration of types and grammars
ACM Transactions on Programming Languages and Systems (TOPLAS)
Decompilation of binary programs
Software—Practice & Experience
Software unit test coverage and adequacy
ACM Computing Surveys (CSUR)
Using regular approximations for generalisation during partial evalution
PEPM '00 Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Symbolic execution and program testing
Communications of the ACM
An Introduction to Partial Deduction
META-92 Proceedings of the 3rd International Workshop on Meta-Programming in Logic
Redundant Argument Filtering of Logic Programs
LOPSTR '96 Proceedings of the 6th International Workshop on Logic Programming Synthesis and Transformation
Decompiling Java Bytecode: Problems, Traps and Pitfalls
CC '02 Proceedings of the 11th International Conference on Compiler Construction
Soot - a Java bytecode optimization framework
CASCON '99 Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research
Assembly to High-Level Language Translation
ICSM '98 Proceedings of the International Conference on Software Maintenance
Homeomorphic embedding for online termination of symbolic methods
The essence of computation
Java Bytecode Verification: Algorithms and Formalizations
Journal of Automated Reasoning
Disassembly of Executable Code Revisited
WCRE '02 Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE'02)
Offline specialisation in Prolog using a hand-written compiler generator
Theory and Practice of Logic Programming
Science of Computer Programming - Special issue: Static analysis symposium (SAS 2003)
Abstract Interpretation of PIC Programs through Logic Programming
SCAM '06 Proceedings of the Sixth IEEE International Workshop on Source Code Analysis and Manipulation
Improving the Decompilation of Java Bytecode to Prolog by Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
A System to Generate Test Data and Symbolically Execute Programs
IEEE Transactions on Software Engineering
Type-Based Homeomorphic Embedding and Its Applications to Online Partial Evaluation
Logic-Based Program Synthesis and Transformation
Supervising offline partial evaluation of logic programs using online techniques
LOPSTR'06 Proceedings of the 16th international conference on Logic-based program synthesis and transformation
Cost analysis of java bytecode
ESOP'07 Proceedings of the 16th European conference on Programming
Using datalog with binary decision diagrams for program analysis
APLAS'05 Proceedings of the Third Asian conference on Programming Languages and Systems
Non-leftmost unfolding in partial evaluation of logic programs with impure predicates
LOPSTR'05 Proceedings of the 15th international conference on Logic Based Program Synthesis and Transformation
Efficient local unfolding with ancestor stacks for full prolog
LOPSTR'04 Proceedings of the 14th international conference on Logic Based Program Synthesis and Transformation
Verification of java bytecode using analysis and transformation of logic programs
PADL'07 Proceedings of the 9th international conference on Practical Aspects of Declarative Languages
PET: a partial evaluation-based test case generation tool for Java bytecode
Proceedings of the 2010 ACM SIGPLAN workshop on Partial evaluation and program manipulation
Test case generation for object-oriented imperative languages in clp*
Theory and Practice of Logic Programming
Compositional CLP-based test data generation for imperative languages
LOPSTR'10 Proceedings of the 20th international conference on Logic-based program synthesis and transformation
Symbolic execution of concurrent objects in CLP
PADL'12 Proceedings of the 14th international conference on Practical Aspects of Declarative Languages
Resource-Driven CLP-Based test case generation
LOPSTR'11 Proceedings of the 21st international conference on Logic-Based Program Synthesis and Transformation
Hi-index | 0.00 |
Reasoning about Java bytecode (JBC) is complicated due to its unstructured control-flow, the use of three-address code combined with the use of an operand stack, etc. Therefore, many static analyzers and model checkers for JBC first convert the code into a higher-level representation. In contrast to traditional decompilation, such representation is often not Java source, but rather some intermediate language which is a good input for the subsequent phases of the tool. Interpretive decompilation consists in partially evaluating an interpreter for the compiled language (in this case JBC) written in a high-level language with respect to the code to be decompiled. There have been proofs-of-concept that interpretive decompilation is feasible, but there remain important open issues when it comes to decompile a real language such as JBC. This paper presents, to the best of our knowledge, the first modular scheme to enable interpretive decompilation of a realistic programming language to a high-level representation, namely of JBC to Prolog. We introduce two notions of optimality which together require that decompilation does not generate code more than once for each program point. We demonstrate the impact of our modular approach and optimality issues on a series of realistic benchmarks. Decompilation times and decompiled program sizes are linear with the size of the input bytecode program. This demonstrates empirically the scalability of modular decompilation of JBC by partial evaluation.