Andrea Flexeder, Bogdan Mihaila, Michael Petter and Helmut Seidl. Interprocedural Control Flow Reconstruction. In Kazunori Ueda, editor, Asian Symposium on Program Languages and Systems, volume 6461 of Lecture Notes in Computer Science, pages 188-203, Shanghai, China, November 2010. Springer.
In this paper we provide an interprocedural algorithm for reconstructing the control flow of assembly code in presence of indirect jumps, call instructions and returns. In case that the underlying assembly code is the output of a compiler, indirect jumps primarily originate from high-level switch statements. For these, our methods succeed in resolving indirect jumps with high accuracy. We show that by explicitly handling procedure calls, additional precision is gained at calls to procedures exiting the program as well as through the analysis of side-effects of procedures onto the local state of the caller. Our prototypical implementation applied to real-world examples shows that this approach yields reliable and meaningful results with decent efficiency.
Download: PDF Reference: Bibtex The original publication is available at www.springerlink.com