17

Ai đó có thể chỉ cho tôi khung công tác hoặc triển khai phân tích bí danh cho Java. Tôi đã xem xét khung công tác asm nhưng nó chỉ cung cấp phân tích luồng dữ liệu và phân tích luồng điều khiển.Phân tích bí danh trong Java

Cập nhật: Chỉ tò mò nhưng có ai biết liệu Findbugs có phân tích bí danh không?

Trả lời

1

doop mà tôi nhìn thấy tại một OOPSLA, nhưng tôi không biết những gì nhà nước nó trong.

Tôi biết không có hiện thực khác, chỉ cần một tấn giấy tờ.

+0

Doop dường như là một trong những nhà nước-of-nghệ thuật các giải pháp vào lúc này. Tôi sẽ thêm một liên kết đến tài liệu hướng dẫn hội nghị PLDI 2015 của họ (https://plast-lab.github.io/doop-pldi15-tutorial/), trong đó có một số lời khuyên thiết lập và ví dụ. Tôi đã có thể thiết lập thành công DOOP và thử nghiệm một chút trong vòng một ngày. –

1

Một khả năng là Sawja, được triển khai trong OCaml. Nó dường như không chứa một phân tích bí danh, nhưng nó cung cấp các khối xây dựng để tạo ra một phân tích.

Về cập nhật của bạn, Bill Pugh's Google talk làm cho âm thanh như Findbugs tìm kiếm các mẫu cụ thể trong mã mà không giải quyết các con trỏ. Tất nhiên, đó là vào năm 2006, vì vậy ai biết được chuyện gì đã xảy ra từ ... Thời gian trôi nhanh.

0

DMS Software Reengineering ToolkitJava Front End có thể được sử dụng để tạo điều này.

DMS cung cấp phân tích mục đích chung, xây dựng bảng cây/biểu tượng và phân tích lưu lượng (luồng điều khiển, lưu lượng dữ liệu, điểm đến, biểu đồ cuộc gọi, ...). Bằng cách kết nối giao diện người dùng với máy móc này, người ta có thể thực hiện các phân tích cụ thể về langauge mà không phải xây dựng hầu hết các máy móc từ đầu. Chúng được sử dụng để thực hiện các phân tích điểm-phân tích toàn cầu và gọi xây dựng biểu đồ trên các ứng dụng C rất lớn và kiểm soát phân tích luồng trên C++.

Đối với Java, chúng tôi có luồng kiểm soát phương pháp cục bộ được triển khai và một số khía cạnh của luồng dữ liệu cục bộ. Để thực hiện phân tích bí danh tốt, bạn cần phải điền vào xây dựng biểu đồ cuộc gọi.

12

tôi biết ba khuôn khổ phân tích chương trình mã nguồn mở với một phân tích bí danh cho Java:

  1. WALA (từ chối trách nhiệm: Tôi là một nhà duy trì Wala).
  2. Soot
  3. Chord

Lưu ý rằng những gì đang thực sự thực hiện trong những khuôn khổ là một points-to analysis, mà người ta có thể xác định khả năng răng cưa. Một số chi tiết về phân tích con trỏ của WALA có sẵn tại http://wala.sourceforge.net/wiki/index.php/UserGuide:PointerAnalysis.

+0

tò mò cách Wala khác với Soot và Chord – pdeva

+1

@pdeva Soot có thể tạo ra bytecode tối ưu, trong khi WALA không tạo mã. WALA có cơ sở hạ tầng tốt cho phân tích dữ liệu liên thủ tục, mà tôi không chắc chắn là trong Soot. Tôi không thực sự biết Chord, nên tôi không chắc nó khác gì. Nếu bạn có một phân tích cụ thể mà bạn muốn triển khai trong WALA và có câu hỏi, bạn có thể gửi email cho danh sách gửi thư của WALA hoặc tôi để được trợ giúp. – msridhar

+0

Dường như với tôi, WALA sử dụng định dạng SSA làm biểu diễn chương trình của nó trong khi định dạng chính Soots là Jimple là định dạng địa chỉ không phải SSA (nhưng có sẵn một định dạng SSA thay thế). – Lii

7

Tôi nghĩ đây là một câu hỏi khá quan trọng khi phân tích điểm/phân tích bí danh là một phần cơ bản của hầu hết các nhiệm vụ phân tích chương trình. Vì vậy, đây là nỗ lực của tôi trong một danh sách đầy đủ hơn về các khung công tác cho Java. Một số là hoàn chỉnh hơn những người khác và đây là một khu vực nghiên cứu hoạt động vì vậy tôi có thể đã bỏ lỡ một vài. Thật khó để nói việc triển khai nào là tốt nhất, nhưng DOOP và SPARK dường như là sự lựa chọn phổ biến giữa các học giả.

  1. Soot (SPARK)
    • Phát hành trước khi mái chèo, nhưng vẫn tích cực được sử dụng bởi các cộng đồng Bồ hóng. SPARK được tích hợp hoàn toàn vào Soot và hoạt động tốt để phân tích ngữ cảnh không nhạy cảm.
    • giấy tờ: [1]
    • Resources: [1], [2]
  2. Soot (PADDLE)
    • Phát hành vào năm 2005-2008. Soot bao gồm giao diện người dùng giao diện cho PADDLE, nhưng không phải là phụ trợ phụ trợ. Dự án không còn được duy trì nữa (tôi không thể chạy nó với các bản phát hành mới nhất của Soot). Biểu diễn được thiết lập dựa trên BDD được hỗ trợ và nhiều trừu tượng về độ nhạy ngữ cảnh để phân tích trong Soot.
    • giấy tờ: [1], [2], [3], [4]
    • Resources: [1]
  3. bddbddb
    • Một declarative Datalog dựa đặc điểm kỹ thuật mà biến đổi phân tích các hoạt động BDD dựa hiệu quả.
    • giấy tờ: [1], [2]
    • Resources: [1]
  4. CHORD
    • Dây nhau cung cấp một số tiêu chuẩn điểm để phân tích lựa chọn cho bối cảnh và phân tích bối cảnh nhạy cảm.
    • Resources: [1], [2]
  5. WALA
    • Wala có một thực hiện các thuật toán luồng dữ liệu Interprocedural Phân Phối Môi trường (IDE).
    • giấy tờ: [1]
    • Resources: [1], [2]
  6. DOOP
    • Một declarative Datalog dựa thực hiện phát hành theo Giấy phép MIT, nhưng đòi hỏi sự độc quyền khuôn khổ LogicBlox Datalog. Tôi tin rằng dự án này hiện đang nắm giữ yêu cầu để trở thành khung công tác nhanh nhất và linh hoạt nhất hiện có. Đây cũng là một dự án rất tích cực và được áp dụng tốt trong cộng đồng nghiên cứu.
    • giấy tờ: [1], [2], [3], [4], [5]
    • Resources: [1], [2], [3], [4]
  7. Atlas (Points-to Toolbox)
    • Phát hành vào năm 2016 bởi bản thân mình. Phân tích điểm Andersen đơn giản cho Atlas.
    • Hộp công cụ điểm tới được phát hành theo Giấy phép MIT, nhưng yêu cầu khung công tác Atlas độc quyền.
    • Resources: [1]
  8. SCUBA
    • Một hạn chế dựa trên giải cho bối cảnh điểm đến nhạy cảm phân tích.
    • giấy tờ: [1]

Bonus công cụ bổ sung để đối phó với thư viện của bên thứ ba.

  1. Averroes
    • Tạo tóm tắt bytecode Java của thư viện của bên thứ ba.
    • giấy tờ: [1], [2]
    • Resources: [1]
  2. Flow Miner
    • Tạo tóm tắt XML của dòng chảy và tính chất của thư viện của bên thứ ba.
    • giấy tờ: [1]
    • Resources: [1]