Proceedings paper

Title:
Comprehensive Multi-Platform Dynamic Program Analysis for the Java and Dalvik Virtual Machines (Invited Paper)
Authors:
Y. Zheng, H. Sun, L. Bulej, P. Tůma, W. Binder
Publication:
Proc. 2014 International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools (PPPJ)
DOI:
Year:
2014
ISBN:
978-1-4503-2926-2
Link:

Abstract:
Despite its importance for many software engineering tasks, dynamic program analysis is only insufficiently supported on the Java platform [2]. Existing Java Virtual Machines (JVMs) as well as Android's Dalvik Virtual Machine (DVM) lack dedicated mechanisms for expressing arbitrary dynamic program analysis tasks at a high abstraction level, for ensuring complete code coverage of the analysis, and for isolating analysis tasks from the observed program to prevent interference. For example, the JVM Tool Interface requires analysis tasks to be written in low-level native code, and some virtual machines (e.g., DVM) do not support it. As a consequence, dynamic program analysis tools are often implemented using low-level mechanisms, resulting in error-prone code that is difficult to maintain, and support only a particular virtual machine. Moreover, many analysis tools produce unsound profiles (due to interference of the analysis with the observed program) or incomplete profiles (due to limited code coverage). We present a novel dynamic program analysis framework that offers high-level abstractions for comprehensive, multi-platform analysis for the JVM and DVM. Our framework ensures complete bytecode coverage and isolates the execution of the analysis code from the observed program. It is based on the concepts developed for DiSL [4], ShadowVM [3], and FRANC [1]. The domain-specific aspect language DiSL is used to specify the events of interest for an analysis. The events captured during program execution are transmitted to the ShadowVM, where the user-defined analysis code processes the events. Different event-ordering semantics are supported, avoiding synchronization for analyses that do not require global event ordering across all threads. In addition to events specified by DiSL code, our framework also generates lifecycle events and inter-process communication events. The latter is particularly important for the analysis of Android applications, as they typically involve multiple processes. Several state-of-the-art analysis tools have already been ported to our framework, including code coverage testing tools, calling-context profilers, and object liftetime profilers.

BibTeX:
@inproceedings{zheng_comprehensive_2014,
    title = {{Comprehensive Multi-Platform Dynamic Program Analysis for the Java and Dalvik Virtual Machines (Invited Paper)}},
    author = {Zheng, Yudi and Sun, Haiyang and Bulej, Lubomir and Tůma, Petr and Binder, Walter},
    year = {2014},
    booktitle = {{Proc. 2014 International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools (PPPJ)}},
    publisher = {ACM},
    series = {{PPPJ '14}},
    location = {New York, NY, USA},
    doi = {10.1145/2655183.2655186},
    isbn = {978-1-4503-2926-2},
    pages = {4--4},
    url = {http://doi.acm.org/10.1145/2655183.2655186},
}