Data Flow Analysis for Reverse Engineering

Cover picture: The oldest known depiction of juggling: a wall painting found in one of the crypts of the Beni Hassan tombs, dating from the middle kingdom of the ancient Egyptian civilization (between 1994 and 1781 B.C.). starting point of the project was the investigation and speciication of techniques to support data ow analysis for reverse engineering and program understanding. I would like to thank Prof. dr. P. Klint who introduced me to the project, and gave me a lot of freedom in doing things as I thought best. The members of the Programming Research Group, especially dr. M.G.J. van den Brand and dr. C. Verhoef, supported me on various aspects of my work and make a nice environment to work in. Paul Klint, Chris Verhoef, Mark van den Brand and Arie van Deursen read draft versions of this document and gave many useful remarks to improve its readability. Finally, Ivonne, my parents, friends, and the members of the Department of Pure Juggling provided all kinds of useful distraction at times when I needed it most.

[1]  C. M. Overstreet,et al.  Support of Software Maintenance Using Data Flow Analysis , 1994 .

[2]  John C. Reynolds,et al.  The discoveries of continuations , 1993, LISP Symb. Comput..

[3]  G. Tamkovich The Program. , 1909, California state journal of medicine.

[4]  E. Reingold,et al.  Combinatorial Algorithms: Theory and Practice , 1977 .

[5]  S LamMonica,et al.  Efficient context-sensitive pointer analysis for C programs , 1995 .

[6]  Paul R. Hendriks,et al.  Implementation of modular algebraic specifications , 1991 .

[7]  Matthew S. Hecht,et al.  Flow Analysis of Computer Programs , 1977 .

[8]  Barbara G. Ryder,et al.  Interprocedural Side Effect Analysis With Pointer Aliasing , 1993, PLDI.

[9]  Eugene H. Spafford,et al.  Dynamic slicing in the presence of unconstrained pointers , 1991, TAV4.

[10]  Paul Klint,et al.  A meta-environment for generating programming environments , 1989, TSEM.

[11]  Jong-Deok Choi,et al.  Pointer-induced aliasing: a clarification , 1993, SIGP.

[12]  D FosdickLloyd,et al.  Data Flow Analysis in Software Reliability , 1976 .

[13]  J. Rekers,et al.  Parser Generation for Interactive Environments , 1992 .

[14]  James R. Larus,et al.  Detecting conflicts between structure accesses , 1988, PLDI '88.

[15]  Erik Ruf,et al.  Context-insensitive alias analysis reconsidered , 1995, PLDI '95.

[16]  E. Kay,et al.  Graph Theory. An Algorithmic Approach , 1975 .

[17]  Arie van Deursen,et al.  Origin Tracking , 1993, J. Symb. Comput..

[18]  Bjarne Steensgaard,et al.  Points-to analysis in almost linear time , 1996, POPL '96.

[19]  J. W. C. Koorn,et al.  GSE: a generic text and structure editor , 1992 .

[20]  Flemming Nielson,et al.  Abstract interpretation: a semantics-based tool for program analysis , 1995, LICS 1995.

[21]  Ken Kennedy,et al.  Conversion of control dependence to data dependence , 1983, POPL '83.

[22]  H. R. Walters On Equal Terms. Implementing Algebraic Specifications , 1991 .

[23]  Corrado Böhm,et al.  Flow diagrams, turing machines and languages with only two formation rules , 1966, CACM.

[24]  M. Burke,et al.  Eecient Flow-sensitive Interprocedural Computation of Pointer-induced Aliases and Side Eeects , 1993 .

[25]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[26]  Hiralal Agrawal,et al.  Towards automatic debugging of computer programs , 1992 .

[27]  P. Klint,et al.  Reverse engineering and system renovation—an annotated bibliography , 1997, SOEN.

[28]  Zohar Manna,et al.  The Translation of 'Go To' Programs to 'While' Programs , 1971, IFIP Congress.

[29]  John Phineas Banning A method for determining the side effects of procedure calls , 1978 .

[30]  Laurie J. Hendren,et al.  Context-sensitive interprocedural points-to analysis in the presence of function pointers , 1994, PLDI '94.

[31]  William E. Weihl,et al.  Interprocedural data flow analysis in the presence of pointers, procedure variables, and label variables , 1980, POPL '80.

[32]  Paul Klint,et al.  The syntax definition formalism SDF—reference manual— , 1989, SIGP.

[33]  Zahira Ammarguellat,et al.  A Control-Flow Normalization Algorithm and Its Complexity , 1992, IEEE Trans. Software Eng..

[34]  Phil Pfeiffer,et al.  Dependence analysis for pointer variables , 1989, PLDI '89.

[35]  C. M. Overstreet,et al.  Using Bidirectional Data Flow Analysis To Support Software Reuse , 1994 .

[36]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..