Abstract :
A dynamic object process graph is a view on the control flow graph from the perspective of a single object. It has been shown that such a graph can be a useful starting point for many reverse engineering tasks, such as program understanding, protocol recovery, and feature location. In a previous paper, we described how dynamic object process graphs can be constructed from detailed program traces. However, the size of such traces is immense. Moreover, the instrumentation was described only for procedural languages. Object-oriented features such as exceptions require special treatment. Also, techniques like multithreading and reflection were not handled by our previous approach. This prevented it from being applicable to real-life systems. In this paper, we introduce an alternative way of collecting the necessary data. By constructing an intermediate graph online, i.e., concurrently with the running program, the trace size problem is eliminated. Additional optimizations for both trace logging and online graph creation are discussed. In a case study, we show that running times are acceptable even for larger Java programs when these optimizations are applied. Additionally, we discuss some special issues arising from analyzing Java instead of C
Keywords :
Java; flow graphs; object-oriented methods; reverse engineering; Java language; control flow graph; dynamic object process graphs; object-oriented features; online construction; procedural languages; reverse engineering; Application software; Flow graphs; Hard disks; Instruments; Java; Multithreading; Protocols; Reflection; Reverse engineering; Sockets;