Abstract
Dynamic analysis tools are often implemented using instrumentation, particularly on managed runtimes including the Java Virtual Machine (JVM). Performing instrumentation robustly is especially complex on such runtimes: existing frameworks offer limited coverage and poor isolation, while previous work has shown that apparently innocuous instrumentation can cause deadlocks or crashes in the observed application. This paper describes ShadowVM, a system for instrumentation-based dynamic analyses on the JVM which combines a number of techniques to greatly improve both isolation and coverage. These centre on the offload of analysis to a separate process; we believe our design is the first system to enable genuinely full bytecode coverage on the JVM. We describe a working implementation, and use a case study to demonstrate its improved coverage and to evaluate its runtime overhead.
- A. Sewe, et al. new Scala() instance of Java: a comparison of the memory behaviour of Java and Scala programs. In Proc. ISMM '12, pages 97--108. ACM, 2012. Google Scholar
Digital Library
- B. Cantrill, et al. Dynamic instrumentation of production systems. In Proc. ATEC '04, pages 15--28. USENIX Association, 2004. Google Scholar
Digital Library
- F. Bellard. QEMU, a fast and portable dynamic translator. In Proc. ATEC '05, pages 41--41. USENIX Association, 2005. Google Scholar
Digital Library
- Hans-J. Boehm. Destructors, finalizers, and synchronization. In Proc. POPL '03, pages 262--272. ACM, 2003. Google Scholar
Digital Library
- D. L. Bruening. Efficient, transparent, and comprehensive runtime code manipulation. PhD thesis, MIT, 2004. AAI0807735. Google Scholar
Digital Library
- C. Luk, et al. Pin: building customized program analysis tools with dynamic instrumentation. In Proc. PLDI '05, pages 190--200. ACM, 2005. Google Scholar
Digital Library
- S. Chiba. Load-time structural reflection in Java. In Proc. ECOOP'00, pages 313--336. Springer-Verlag, 2000. Google Scholar
Digital Library
- J. Chow, T. Garfinkel, and P. M. Chen. Decoupling dynamic program analysis from execution in virtual environments. In Proc. ATC'08, pages 1--14. USENIX Association, 2008. Google Scholar
Digital Library
- M. Factor, A. Schuster, and K. Shagin. Instrumentation of standard libraries in object-oriented languages: the twin class hierarchy approach. In Proc. OOPSLA '04, pages 288--300. ACM, 2004. Google Scholar
Digital Library
- C. Flanagan and S. N. Freund. FastTrack: efficient and precise dynamic race detection. In Proc. PLDI '09, pages 121--133. ACM, 2009. Google Scholar
Digital Library
- C. Flanagan and S. N. Freund. The RoadRunner dynamic analysis framework for concurrent programs. In Proc. PASTE '10, pages 1--8. ACM, 2010. Google Scholar
Digital Library
- S. L. Graham, P. B. Kessler, and M. K. Mckusick. Gprof: A call graph execution profiler. In Proc. SIGPLAN '82, pages 120--126. ACM, 1982. Google Scholar
Digital Library
- J. Gosling, et al. Java(TM) Language Specification, The (Java SE 7 Edition, 4th Edition). Addison-Wesley Professional, 2013.Google Scholar
- J. Ha, et al. A concurrent dynamic analysis framework for multicore hardware. In Proc. OOPSLA '09, pages 155--174. ACM, 2009. Google Scholar
Digital Library
- K. Ogata, et al. A study of Java's non-Java memory. In Proc. OOPSLA '10, pages 191--204. ACM, 2010. Google Scholar
Digital Library
- L. Marek, et al. DiSL: a domain-specific language for bytecode instrumentation. In Proc. AOSD '12, pages 239--250. ACM, 2012. Google Scholar
Digital Library
- P. Moret, W. Binder, and É. Tanter. Polymorphic bytecode instrumentation. In Proc. AOSD '11, pages 129--140. ACM, 2011. Google Scholar
Digital Library
- Mayur Naik. Chord user guide, March 2011. URL http://pag-www.gtisc.gatech.edu/chord/user_guide/. Retrieved on 2013/3/28.Google Scholar
- N. Nethercote and J. Seward. Valgrind: a framework for heavyweight dynamic binary instrumentation. SIGPLAN Not., 42 (6): 89--100, 2007. Google Scholar
Digital Library
- Q. Zhao, et al. Pipa: pipelined profiling and analysis on multi-core systems. In Proc. CGO '08, pages 185--194. ACM, 2008. Google Scholar
Digital Library
- R. Vallée-Rai, et al. Optimizing Java bytecode using the Soot framework: Is it feasible? In Proc. CC '00, pages 18--34. Springer-Verlag, 2000. Google Scholar
Digital Library
- S. Kell, et al. The JVM is not observable enough (and what to do about it). In Proc. VMIL '12, pages 33--38. ACM, 2012. Google Scholar
Digital Library
- S. M. Blackburn, et al. The DaCapo benchmarks: Java benchmarking development and analysis. In Proc. OOPSLA '06, pages 169--190. ACM, 2006. Google Scholar
Digital Library
- D. Saff, S. Artzi, J. H. Perkins, and M. D. Ernst. Automatic test factoring for Java. In Proc. ASE '05, pages 114--123. ACM, 2005. Google Scholar
Digital Library
- K. Sen, D. Marinov, and G. Agha. Cute: a concolic unit testing engine for c. In Proc. ESEC/FSE-13, pages 263--272. ACM, 2005. Google Scholar
Digital Library
- T. Moseley, et al. Shadow profiling: Hiding instrumentation costs with parallelism. In Proc. CGO '07, pages 198--208. IEEE Computer Society, 2007. Google Scholar
Digital Library
- E. Tilevich and Y. Smaragdakis. Transparent program transformations in the presence of opaque code. In Proc. GPCE '06, pages 89--94. ACM, 2006. Google Scholar
Digital Library
- W. Enck, et al. TaintDroid: an information-flow tracking system for realtime privacy monitoring on smartphones. In Proc. OSDI'10, pages 1--6. USENIX Association, 2010. Google Scholar
Digital Library
- S. Wallace and K. Hazelwood. Superpin: Parallelizing dynamic instrumentation for real-time performance. In Proc. CGO '07, pages 209--220. IEEE Computer Society, 2007. Google Scholar
Digital Library
Index Terms
ShadowVM: robust and comprehensive dynamic program analysis for the java platform
Recommendations
The JVM is not observable enough (and what to do about it)
VMIL '12: Proceedings of the sixth ACM workshop on Virtual machines and intermediate languagesBytecode instrumentation is a preferred technique for building profiling, debugging and monitoring tools targeting the Java Virtual Machine (JVM), yet is fundamentally dangerous. We illustrate its dangers with several examples gathered while building ...
Advanced Java bytecode instrumentation
PPPJ '07: Proceedings of the 5th international symposium on Principles and practice of programming in JavaBytecode instrumentation is a valuable technique for transparently enhancing virtual execution environments for purposes such as monitoring or profiling. Current approaches to bytecode instrumentation either exclude some methods from instrumentation, ...
ShadowVM: robust and comprehensive dynamic program analysis for the java platform
GPCE '13: Proceedings of the 12th international conference on Generative programming: concepts & experiencesDynamic analysis tools are often implemented using instrumentation, particularly on managed runtimes including the Java Virtual Machine (JVM). Performing instrumentation robustly is especially complex on such runtimes: existing frameworks offer limited ...







Comments