Results 1 - 10
of
24
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)
Program Restructuring as an Aid to Software Maintenance
, 1991
"... Maintenance tends to degrade the structure of software, ultimately making maintenance more costly. At times, then, it is worthwhile to manipulate the structure of a system to make changes easier. However, it is shown that manual restructuring is an error-prone and expensive activity. By separating ..."
Abstract
-
Cited by 79 (9 self)
- Add to MetaCart
Maintenance tends to degrade the structure of software, ultimately making maintenance more costly. At times, then, it is worthwhile to manipulate the structure of a system to make changes easier. However, it is shown that manual restructuring is an error-prone and expensive activity. By separating structural manipulations from other maintenance activities, the semantics of a system can be held constant by a tool, assuring that no errors are introduced by restructuring. To allow the maintenance team to focus on the aspects of restructuring and maintenance requiring human judgment, a transformation-based tool can be provided---based on a model that exploits preserving data flow-dependence and control flow-dependence---to automate the repetitive, errorprone, and computationally demanding aspects of re...
Testability Transformation
- IEEE TRANSACTIONS ON SOFTWARE ENGINEERING
, 2004
"... A testability transformation is a source-to-source transformation that aims to improve the ability of a given test generation method to generate test data for the original program. This paper ..."
Abstract
-
Cited by 50 (26 self)
- Add to MetaCart
A testability transformation is a source-to-source transformation that aims to improve the ability of a given test generation method to generate test data for the original program. This paper
Effective, Automatic Procedure Extraction
, 2003
"... Legacy code can often be made more understandable and maintainable by extracting out selected sets of statements to form procedures and replacing the extracted code with procedure calls. Sets of statements that are noncontiguous and/or include non-local jumps (caused by gotos, breaks, continues, etc ..."
Abstract
-
Cited by 27 (2 self)
- Add to MetaCart
Legacy code can often be made more understandable and maintainable by extracting out selected sets of statements to form procedures and replacing the extracted code with procedure calls. Sets of statements that are noncontiguous and/or include non-local jumps (caused by gotos, breaks, continues, etc.) can be difficult to extract, and usually cause previous automatic-extraction algorithms to fail or to produce poor results.
Semantics-Preserving Procedure Extraction
- In POPL
, 2000
"... Procedure extraction is an important program transformation that can be used to make programs easier to understand and maintain, to facilitate code reuse, and to convert \monolithic " code to modular or object-oriented code. Procedure extraction involves the following steps: 1. The statements to be ..."
Abstract
-
Cited by 26 (3 self)
- Add to MetaCart
Procedure extraction is an important program transformation that can be used to make programs easier to understand and maintain, to facilitate code reuse, and to convert \monolithic " code to modular or object-oriented code. Procedure extraction involves the following steps: 1. The statements to be extracted are identied (by the programmer or by a programming tool). 2. If the statements are not contiguous, they are moved together so that they form a sequence that can be extracted into a procedure, and so that the semantics of the original code is preserved. 3. The statements are extracted into a new procedure, and are replaced with an appropriate call. This paper addresses step 2: in particular, the conditions under which it is possible to move a set of selected statements together so that they become \extractable", while preserving semantics. Since semantic equivalence is, in general, undecidable, we identify sucient conditions based on control and data dependences, and dene an ...
Structuring Decompiled Graphs
- In Proceedings of the International Conference on Compiler Construction
, 1996
"... . A structuring algorithm for arbitrary control flow graphs is presented. Graphs are structured into functional, semantical and structural equivalent graphs, without code replication or introduction of new variables. The algorithm makes use of a set of generic high-level language structures that inc ..."
Abstract
-
Cited by 21 (6 self)
- Add to MetaCart
. A structuring algorithm for arbitrary control flow graphs is presented. Graphs are structured into functional, semantical and structural equivalent graphs, without code replication or introduction of new variables. The algorithm makes use of a set of generic high-level language structures that includes different types of loops and conditionals. Gotos are used only when the graph cannot be structured with the structures in the generic set. This algorithm is adequate for the control flow analysis required when decompiling programs, given that a pure binary program does not contain information on the high-level structures used by the initial high-level language program (i.e. before compilation). The algorithm has been implemented as part of the dcc decompiler, an i80286 decompiler of DOS binary programs, and has proved successful in its aim of structuring decompiled graphs. 1 Introduction A decompiler is a software tool that reverses the compilation process by translating a pure binar...
From Business Process Models to Process-oriented Software Systems: The BPMN to BPEL Way ⋆
"... Abstract. Emerging methods for enterprise systems analysis rely on the representation of work practices in the form of business process models. A standard for representing such models is the Business Process Modeling Notation (BPMN). BPMN models are mainly intended for communication and decision-mak ..."
Abstract
-
Cited by 9 (0 self)
- Add to MetaCart
Abstract. Emerging methods for enterprise systems analysis rely on the representation of work practices in the form of business process models. A standard for representing such models is the Business Process Modeling Notation (BPMN). BPMN models are mainly intended for communication and decision-making between domain analysts, but often they are also given as input to software development projects. Meanwhile, development methods for process-oriented systems rely on detailed process definitions that are executed by process engines. These process definitions refine BPMN models by adding data manipulation, application binding and other implementation details. A major standard for process implementation is the Business Process Execution Language for Web Services (BPEL4WS, or BPEL for short). Accordingly, a natural method for end-to-end development of process-oriented systems is to translate BPMN models to BPEL definitions for subsequent refinement. However, instrumenting this method is challenging because BPEL imposes far more syntactic restrictions than BPMN so as to ensure correctness. Existing techniques for translating BPMN to BPEL only work for limited classes of BPMN models. This paper proposes techniques that overcome these limitations. Beyond its direct relevance in the context of BPMN and BPEL, the techniques presented in this paper address issues that arise generally when translating from graphical/unstructured to textual/structured (i.e. more programming-like) languages. 1
A Structuring Algorithm for Decompilation
- In XIX Conferencia Latinoamericana de Inform'atica
, 1993
"... This paper presents a structuring algorithm for arbitrary reducible, unstructured graphs. Graphs are structured into semantically equivalent graphs, without the need of code replication or introduction of new variables. The algorithm makes use of structures such as, if..then..elses, while, repeat an ..."
Abstract
-
Cited by 8 (2 self)
- Add to MetaCart
This paper presents a structuring algorithm for arbitrary reducible, unstructured graphs. Graphs are structured into semantically equivalent graphs, without the need of code replication or introduction of new variables. The algorithm makes use of structures such as, if..then..elses, while, repeat and loop loops, and case statements. Gotos are only used when the graph cannot be structured with any of the above constructs. This algorithm is adequate for the analysis needed in the decompilation of programs, given that a binary program does not contain information as to the language and compiler used to compile the original source program. And given that unstructuredness is introduced by the use of gotos (still widely available in today's compilers) and optimizations produced by the compiler, we have to assume an unstructured graph for our decompilation analysis. This algorithm has been implemented as part of the dcc decompiler, currently under development at the Queensland University of ...
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
GOTO Removal Based On Regular Expressions
- Journal of Software Maintenance
, 1997
"... this paper, we describe a way of reducing GOTO removal to the well-understood problem of converting a finite-state transition network to a regular expression. A semantics is provided showing the regular expression form may be interpreted as a nondeterministic program. A set of pattern-based reductio ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
this paper, we describe a way of reducing GOTO removal to the well-understood problem of converting a finite-state transition network to a regular expression. A semantics is provided showing the regular expression form may be interpreted as a nondeterministic program. A set of pattern-based reduction rules is used to transform the regular expression form back to a conventional structured program. Besides achieving greater conceptual unity, the method leads to a simpler algorithm where the task of recognizing loop boundaries is separated from that of identifying loop exits. We have successfully applied the algorithm in systems for reengineering COBOL/IMS database systems and assembly language code.

