Static and Dynamic Analysis of Call Chains in Java

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   java   os   io   

Static and Dynamic Analysis of Call Chains in Java

  1. Abstract

This work present a parameterized framework for static and dynamic analysis of call chain in java components.

  1. Introduction
  • The designers of a call chain analysis have to address several important issues;
    • How to ensure that the analysis reports few infeasible chains?
    • The results should represent the set of call chains in a compact manner;
    • The analysis should employ mechanisms for controlling the number of reported chains;
  • Different levels of call edge granularity should be supported (an edge may either represent a relationship "invokes ", or a finer-grain relationship call site inside invokes );
    • A dynamic call chain analysis takes as input a set of call chains computed by some static call chain analysis;
      • It should instrument only the component of interest, and not other components that interact with it;
      • It should identify and ignore run-time events that are not relevant to the given static call chains;
      • It should handle correctly the potential interactions between the instrumented and the non-instrumented parts of the program.
    • Analysis framework
      • This work is designed based on a data structure that is generalized form of a calling context tree;
      • 1) call graph construction algorithm; 2) granularity of call graph edges; 3) mechanism for choosing "interesting"chains, and (4) handling of recursion.
      • This parameterization allows various uses of the approach in software tools;
      • This empirical study addresses two key questions:
        • What exactly is the imprecision in the chains computed using popular class analyses such as Rapid Type Analysis and Andersen-style points-to analysis?
        • What are the limits of call chain precision for all class analyses- that is, how much call chain infeasibility would remain even if the "most powerful" class analysis were available.
  1. Static Analysis
  • Each non-abstract method in the component is represented by a graph node.
  • Call graphs may represent different kinds of relationships:
    • method invokes method ;
    • call site inside invokes ;
    • call site inside invokes on an instance of .
    • Our static and dynamic analyses are designed for the last choice from the list; therefore, we assume that each call graph edge is labeled with a pair of a call site and a receiver class.
    • Artificial node caller is an abstraction of all external callers of the component, and artificial node callee is an abstraction of any external code that is called by the component.
    • Calling Context Trees
      • The root of the tree represents the starting point of the program, and each tree node n represents a particular call chain containing n and all of its ancestors in the tree.
      • We associate a separate calling context tree with each entry method in the component. In the component-level call graph, an entry method has an incoming artificial edge which shows that the method may be called by non-component code.
  • Tree Construction

    • label(e) is used to denote the pair of a call site and a receiver class associated with call graph edge .
      • createNewChild (t, m‘, label (e)): creates a new tree node attached to , and the link is tagged as . <//build the link between to t, m is entry method which is associated with t>
    • To avoid infeasible chain, this approach use a simple test: for any call through this, the receiver class associated with e should match the receiver class associated with the last edge in chain.
    • use-backedges: creating a back-edge from a tree node to some ancestor of that node. In addition, if use-backedges is true, our analysis uses the same approach (lines 7–9). The call to createNewBackedge at line 8 traverses the ancestors of t, finds the ancestor node t‘that corresponds to m‘, and creates a backedge from t to t‘labeled with label(e). If the flag is false, recursion is unrolled until the stopping criterion indicates that no further unrolling is necessary.
  1. Dynamic Analysis
  • Instrumentation
    • (1) We need instrumentation at the beginning and at the returns of each entry method. This instrumentation creates run-time events of the form entered (m) and exited (m), where m is an entry method.
    • (2) We need instrumentation immediately before and immediately after certain call sites. <!-- for a call site c, the generated run-time events are before(c, X) and after(c, X), where X is the class of the receiver object.>
    • (3) If c is a call to a static method, we use X = none. Call site instrumentation is needed only for call sites that correspond to edges in the input forest, and for call sites that have outgoing call edges to non-component code.
    • (4)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.