Decompilation of binary programs

@article{Cifuentes1995DecompilationOB,
  title={Decompilation of binary programs},
  author={Cristina Cifuentes and Kevin John Gough},
  journal={Software: Practice and Experience},
  year={1995},
  volume={25}
}
The structure of a decompiler is presented, along with a thorough description of the different modules that form part of a decompiler, and the type of analyses that are performed on the machine code to regenerate high-level language code. [...] Key Method The front-end is a machine dependent module that performs the loading, parsing and semantic analysis of the input program, as well as generating an intermediate representation of the program. The universal decompiling machine is a machine and language…Expand
Reverse compilation techniques
Techniques for writing reverse compilers or decompilers are presented in this thesis. These techniques are based on compiler and optimization theory, and are applied to decompilation in a unique way;Expand
Decompilation as search
TLDR
This thesis makes the case that decompilation is more effectively accomplished through search, and proposes an approach to prototype recovery that follows the principle of conformant execution, in the form of inlined data source tracking, to infer arrays, pointer-to-pointers and recursive data structures. Expand
Decompilation of Java bytecode to Prolog by partial evaluation
TLDR
This paper presents the first modular scheme to enable interpretive decompilation of a realistic programming language to a high-level representation, namely of JBC to Prolog, and introduces two notions of optimality which together require that decompilation does not generate code more than once for each program point. Expand
Using a decompiler for real-world source recovery
TLDR
This work describes the experience gained from applying a native executable decompiler, assisted by a commercial disassembler and hand editing, to a real-world Windows-based application. Expand
A refined decompiler to generate C code with high readability
TLDR
A practical decompiler called C‐Decompiler for Windows C programs that uses a shadow stack to perform refined data flow analysis, adopts inter‐basic‐block register propagation to reduce redundant variables, and recognizes library functions by signatures is presented. Expand
Interprocedural data flow decompilation
Traditional compiler data flow analysis techniques are used to transform the intermediate representation of a decompiled program to a higher representation that eliminates low-level concepts such asExpand
A transformational approach to binary translation of delayed branches
TLDR
A disciplined method for deriving case analyses for identifying problematic cases, showing the translations for the nonproblematic cases, and giving confidence that all cases are considered is presented. Expand
To Goto Where No Statement Has Gone Before
TLDR
The method always produces an expression, unlike the heuristics for decompilation which may fail, and is efficient: the resulting expression is linear in the size of the CFG by maintaining all sharing of subgraphs. Expand
Recovery of jump table case statements from binary code
TLDR
This paper presents a technique for recovering jump tables and their target addresses in a machine and compiler independent way based on slicing and copy propagation, and shows that up to 89% more of the code in a text segment can be found by using this technique, when compared against the standard method of decoding. Expand
Practical dynamic reconstruction of control flow graphs
TLDR
Experimental results provide evidence that completeness, that is, the ability to conclude that the entire CFG has been discovered, is achievable on many functions that are part of industry‐strong benchmarks, and indicate that dynamic information greatly enhances the ability of DynInst, a state‐of‐the‐art binary reconstructor, to deal with code stripped of debugging information. Expand
...
1
2
3
4
5
...

References

SHOWING 1-10 OF 38 REFERENCES
A Methodology for Decompilation
A proposed methodology for decompilation of binary programs is presented, along with a description of a particular implementation of this methodology, dcc. dcc is a decompiler for the Intel 80x86Expand
Reverse compilation techniques
Techniques for writing reverse compilers or decompilers are presented in this thesis. These techniques are based on compiler and optimization theory, and are applied to decompilation in a unique way;Expand
Language Design Using Decompilation.
Abstract : This report represents the results of a project in which decompilation techniques were used to identify the essential characteristics of a high-level progamming language suitable forExpand
Decompilation: the enumeration of types and grammars
TLDR
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 the technique in practical instances, including the decompiler for the language presented here. Expand
A Structuring Algorithm for Decompilation
TLDR
This paper presents a structuring algorithm for arbitrary reducible, unstructured graphs that makes use of structures such as, if..then..elses, while, repeat and loop loops, and case statements. Expand
Interprocedural data flow decompilation
Traditional compiler data flow analysis techniques are used to transform the intermediate representation of a decompiled program to a higher representation that eliminates low-level concepts such asExpand
Intercomputer Transportation of Assembly Language Software through Decompilation.
TLDR
A translator that performs a decompilation of the source program into an intermediate representation at a higher semantic level is described, and this translation scheme is shown to remove most of the machine dependency from assembly language software. Expand
Taming control flow: a structured approach to eliminating goto statements
  • Ana M. Erosa, L. Hendren
  • Computer Science
  • Proceedings of 1994 IEEE International Conference on Computer Languages (ICCL'94)
  • 1994
TLDR
A straight-forward algorithm to structure C programs by eliminating all goto statements by working directly on a high-level abstract syntax tree (AST) representation of the program and could easily be integrated into any compiler that uses an AST-based intermediate representation. Expand
An Algorithm for Structuring Flowgraphs
TLDR
An algorithm which transforms a flowgraph into a program containing control constructs such as if then else statements, repeat (do forever) statements, multileVEL break statements, and multilevel next statements, which is substantially more readable than their Fortran counterparts. Expand
The Theory of Parsing, Translation, and Compiling
TLDR
It is the hope that the algorithms and concepts presented in this book will survive the next generation of computers and programming languages, and that at least some of them will be applicable to fields other than compiler writing. Expand
...
1
2
3
4
...