Results 1 -
8 of
8
Decompilation of Binary Programs
, 1995
"... this paper is structured in the following way: a thorough description of the structure of a decompiler, followed by the description of our implementation of an # An idiom is a sequence of instruction that forms a logical entity and has a meaning that cannot be derived by considering the primary mean ..."
Abstract
-
Cited by 82 (12 self)
- Add to MetaCart
this paper is structured in the following way: a thorough description of the structure of a decompiler, followed by the description of our implementation of an # An idiom is a sequence of instruction that forms a logical entity and has a meaning that cannot be derived by considering the primary meanings of the individual instructions # # # # HLL program (language dependent) Back-end (analysis) UDM (machine dependent) Front-end binary program Figure 1. Decompiler modules automatic decompiling system, and conclusions. The paper is followed by the definitions of graph theoretical concepts used throughout the paper (Appendix I), and sample output from different phases of the decompilation of a program (Appendix II)
Taming Control Flow: A Structured Approach to Eliminating Goto Statements
- In Proceedings of 1994 IEEE International Conference on Computer Languages
, 1994
"... In designing optimizing and parallelizing compilers, it is often simpler and more efficient to deal with programs that have structured control flow. Although most programmers naturally program in a structured fashion, there remain many important programs and benchmarks that include some number of go ..."
Abstract
-
Cited by 41 (7 self)
- Add to MetaCart
In designing optimizing and parallelizing compilers, it is often simpler and more efficient to deal with programs that have structured control flow. Although most programmers naturally program in a structured fashion, there remain many important programs and benchmarks that include some number of goto statements, thus rendering the entire program unstructured. Such unstructured programs cannot be handled with compilers built with analyses and transformations for structured programs. In this paper we present a straight-forward algorithm to structure C programs by eliminating all goto statements. The method works directly on a highlevel abstract syntax tree (AST) representation of the program and could easily be integrated into any compiler that uses an AST-based intermediate representation. The actual algorithm proceeds by eliminating each goto by first applying a sequence of gotomovement transformations followed by the appropriate goto-elimination transformation. We have implemented...
General Method of Program Code Obfuscation
, 2002
"... Obfuscation can be a simple tool for soft- ware protection. In this paper we present a method of machine code obfuscation, which can be applied to most present processors. The obfuscation method is based on a theory, which led to two useful theorems. The proposed algorithm of obfuscation was impleme ..."
Abstract
-
Cited by 32 (0 self)
- Add to MetaCart
Obfuscation can be a simple tool for soft- ware protection. In this paper we present a method of machine code obfuscation, which can be applied to most present processors. The obfuscation method is based on a theory, which led to two useful theorems. The proposed algorithm of obfuscation was implemented and tested using analytical and empirical approaches. The obtained results give the first estimation of the maximum possible eciency of the obfuscation process.
Krakatoa: Decompilation in Java (Does Bytecode Reveal Source?)
- In Third USENIX Conference on Object-Oriented Technologies and Systems (COOTS
, 1997
"... This paper presents our technique for automatically decompiling Java bytecode into Java source. Our technique reconstructs source-level expressions from bytecode, and reconstructs readable, high-level control statements from primitive goto- like branches. Fewer than a dozen simple coderewriting rul ..."
Abstract
-
Cited by 24 (0 self)
- Add to MetaCart
This paper presents our technique for automatically decompiling Java bytecode into Java source. Our technique reconstructs source-level expressions from bytecode, and reconstructs readable, high-level control statements from primitive goto- like branches. Fewer than a dozen simple coderewriting rules reconstruct the high-level statements. 1 Introduction Decompilation transforms a low-level language into a high-level language. The Java Virtual Machine (JVM) specifies a low-level bytecode language for a stack-based machine [LY97]. This language defines 203 operators, with most of the control flow specified by simple explicit transfers and labels. Compiling a Java class yields a class file that contains type information and bytecode. The JVM requires a significant amount of type information from the class files for object linking. Furthermore, the bytecode must be verifiably well-behaved in order to ensure safe execution. Decompilation systems can exploit this type information and well...
Interprocedural Data Flow Decompilation
- Journal of Programming Languages
, 1996
"... 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 as registers and condition codes, and reintroduces the high-level concept of expression. Summary data fl ..."
Abstract
-
Cited by 15 (8 self)
- Add to MetaCart
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 as registers and condition codes, and reintroduces the high-level concept of expression. Summary data flow information is collected on condition codes and registers, and is propagated across basic blocks and subroutine boundaries to find boolean and arithmetic expressions, register arguments, function return registers, actual arguments, and propagate data types whenever required. The elimination of condition codes is performed by an extension of a reach algorithm. The elimination of registers and intermediate instructions is performed by an extended copy propagation algorithm that is based on intra and interprocedural analysis of the program's control flow graph. The methods presented in this paper have been implemented in dcc, a prototype decompiler for the Intel i80286 architecture. Experi...
A SUIF Java compiler
, 1998
"... To compete with optimized C, object-oriented languages need classical optimizations as well as specific object-oriented optimizations. Therefore, a compiler infrastructure that enables object-oriented compiler research isof great interest for the research community. The SUIF compiler system with the ..."
Abstract
-
Cited by 7 (1 self)
- Add to MetaCart
To compete with optimized C, object-oriented languages need classical optimizations as well as specific object-oriented optimizations. Therefore, a compiler infrastructure that enables object-oriented compiler research isof great interest for the research community. The SUIF compiler system with the OSUIF extension offers such a research environment. SUIF defines an intermediate representation for procedural languages and offers standard optimization passes. OSUIF extends SUIF with an intermediate representation tailored towards object-oriented languages, hence allowing specific object-oriented optimizations. To enable Java-related compiler research in (O)SUIF, we have implemented j2s, a Java bytecode front end for the OSUIF/SUIF 2.0 compiler system. Our compiler uses off-line compilation, so that the whole program is known at compile time. Thus, static whole-program optimizations such as class hierarchy analysis and type inference can be implemented with (O)SUIF and applied during the compilation. j2s supports the complete Java Virtual Machine specification, except for threads and exception handling, which are currently not supported by the runtime system and (O)SUIF. Because we implemented an off-line compiler, the dynamic loading of classes is also not supported. The compiler is divided into the (O)SUIF front end and the runtime system. The main part of
A Goto-Elimination Method And Its Implementation For The McCat C Compiler
- In Proc. of the 5th Intl. Work
, 1995
"... In designing optimizing and parallelizing compilers, it is often simpler and more efficient to deal with programs that have structured control flow. Although most programmers naturally program in a structured fashion, there remain many important programs and benchmarks that include some number of go ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
In designing optimizing and parallelizing compilers, it is often simpler and more efficient to deal with programs that have structured control flow. Although most programmers naturally program in a structured fashion, there remain many important programs and benchmarks that include some number of goto statements, thus rendering the entire program unstructured. Such unstructured programs cannot be handled with compilers built with analyses and transformations for structured programs. In this thesis we present a straight-forward algorithm to structure C programs by eliminating all goto statements. The method works 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. The actual algorithm proceeds by eliminating each goto by first applying a sequence of gotomovement transformations followed by the appropriate goto-elimination transformation. Our McCAT (McGill ...
LLVM-CHiMPS: Compilation Environment for FPGAs Using LLVM Compiler Infrastructure and CHiMPS Computational Model
"... CHiMPS (Compiling High level language to Massively Pipelined System) system, developed by Xilinx is gaining popularity due to its convenient computational model and architecture for field programmable gate array computing. The CHiMPS system utilizes CHiMPS target language as an intermediate represen ..."
Abstract
- Add to MetaCart
CHiMPS (Compiling High level language to Massively Pipelined System) system, developed by Xilinx is gaining popularity due to its convenient computational model and architecture for field programmable gate array computing. The CHiMPS system utilizes CHiMPS target language as an intermediate representation to bridge between the high level language and the data flow architecture generated from it. However, currently the CHiMPS frontend does not provide many commonly used optimizations and has some use restrictions. In this paper we present an alternative compiler environment based on low level virtual machine compiler environment extended to generate CHiMPS target language code for the CHiMPS architecture. Our implementation provides good support for global optimizations and analysis and overcomes many limitations of the original Xilinx CHiMPS compiler. Simulation results from codes based on this approach show to outperform those obtained with the original CHiMPS compiler.

