|
Enhancement of Decompilation by Using Dynamic Code Analysis
Končický, Jaromír ; Zemek, Petr (referee) ; Ďurfina, Lukáš (advisor)
As a part of the Lissom project, a retargetable decompiler is being developed. Its main purpose is to decompile programs for a particular microprocessor architecture into a high-level programming language. In present, methods of dynamic code analysis are not used during decompilation. However, we can significantly improve the decompilation results by using these methods. Design of dynamic-analysis methods is the main task of this thesis. In this thesis, reverse engineering and Lissom decompiler are described. Furthermore, general dynamic analysis methods, such as instrumentation and emulation, are described. The information we can obtain by using dynamic analysis and its usage during decompilation is proposed.
|
|
Source-Code Migration Using Decompilation
Korec, Tomáš ; Ďurfina, Lukáš (referee) ; Zemek, Petr (advisor)
This thesis deals with source-code migration of high-level programming languages using decompilation. A migration tool developed within the thesis is built on top of the middle-end and back-end parts of Lissom project decompiler. Several compilers generating LLVM IR code from input languages are discussed. Compilers suitable for integration to the migration tool were chosen. Compiled LLVM IR code is an input of the decompiler's optimizing middle-end. The output from the migration tool is a code in the C language or Python-like language generated by the back-end of the decompiler. The input languages are Fortran and its dialects, C/C++/Objective-C/Objective-C++, and D. The thesis describes problems connected with migration of these languages, their solutions, and ways to improve quality and readability of the produced source code.
|
|
Code Structuring in Decompiler Back-End
Hrbek, David ; Matula, Peter (referee) ; Zemek, Petr (advisor)
The goal of this thesis was to design and implement an algorithm for code structuring in Lissom decompiler's back-end. This algorithm eliminates indirect jumps (branch/goto) from low-level code with a use of high-level constructs, such as conditional statements (if, switch) and loops (for, while). This thesis contains an introduction into the topic of decompilation, some information about the Lissom project's decompiler, a proposal of the structuring algorithm, details of its implementation, testsuite description and results summary.
|
| |
| |