2009-03-12 7 views
6

Tôi đang tìm các cách/công cụ/dự án dịch Java bytecode sang các ngôn ngữ lập trình khác hoặc, ít nhất là vào một biểu diễn có cấu trúc (như XML). Nguồn mở lý tưởng, một cách tự nhiên.Dịch mã byte Java sang các ngôn ngữ lập trình và ngôn ngữ lập trình khác

Tôi đã xem ASM, "khung điều khiển và phân tích bytecode". Nó không hỗ trợ dịch cho các đại diện khác, nhưng trông giống như một nền tảng tốt cho một dự án như vậy. Đáng buồn thay, không có dự án nào được liệt kê trên số users page của họ đến gần.

Trả lời

7

ASM có api cây mà về cơ bản có thể cung cấp cho bạn cấu trúc đầy đủ của bytecode. Có vẻ như nó khá dễ sử dụng hoặc thậm chí api khách truy cập để in ra trong XML hoặc một số định dạng khác. Bạn không chắc chắn việc sử dụng đó là gì.

Dịch ngược trở lại Java là công việc của trình giải mã và những công việc như Jad làm ok. Nhưng điều đó khó bởi vì a) có thông tin bị mất trong nguồn tới bản dịch bytecode và b) có sự mơ hồ trong nhiều nguồn đó có thể mang lại cùng một mã byte.

Nếu bạn thực sự muốn chuyển từ bytecode sang ngôn ngữ cấp cao khác trực tiếp, điều đó sẽ khó khăn để thực hiện cả hai và toàn diện, vì tất cả các lý do tương tự là giải mã khó, ngoại trừ thậm chí tệ hơn vào một ngôn ngữ khác.

Nếu bạn muốn chuyển từ nguồn Java sang nguồn ngôn ngữ khác, điều này đã được thực hiện trước đây, như trong Java-to-Python converter này. Điều đó có phần dễ dàng hơn khi bạn có thể chuyển đổi Java sang một AST với một số thứ như Antlr hoặc các công cụ biên dịch Java tích hợp, Project Jackpot, v.v.

1

Có vẻ như bạn đang tìm kiếm trình biên dịch chéo. Tôi biết về dự án xmlvm nhưng chưa bao giờ sử dụng nó. Có lẽ điều này phù hợp với nhu cầu của bạn.

1

Bạn có thể thử gcj để chuyển đổi mã byte thành mã gốc.

Nếu bạn muốn chuyển đổi sang các ngôn ngữ như python/groovy/ruby, hãy xem xét viết trực tiếp trên JVM (Tôi nhận thấy đây không phải là chính xác là những gì bạn đang tìm kiếm).

Có lẽ nhặt rác một số ví dụ từ một cái gì đó như thế này Eclipse Byte Code outline viewer.

Cuối cùng, chuyển đổi từ một ngôn ngữ cấp thấp (mã byte) sang ngôn ngữ khác sẽ là khá phức tạp và tính chính xác sẽ là một vấn đề.

2

Hãy thử BCEL (thư viện kỹ thuật mã byte). Bạn có thể triển khai giao diện Khách truy cập, bạn có thể sử dụng giao diện này để tạo nội dung bạn muốn (mã nguồn bằng ngôn ngữ khác, AST tùy chỉnh, xml, bao giờ).

Tôi đã sử dụng nó cho một dự án ở trường đại học mà tôi (chủ yếu) đã sửa đổi một khung phân tích chương trình làm việc trên mã nguồn Java thành một mã cũng có thể hoạt động với mã byte Java. Nhiệm vụ đó liên quan đến việc tạo ra các nút cho biểu diễn AST bên trong của khung phân tích.

Ngoài ra,

Tôi đã lướt qua nhanh tài liệu cho dự án "ASM" mà bạn đã đề cập. Có vẻ như nó định nghĩa một số lớp vistior. Bạn sẽ có thể sử dụng chúng để làm những gì bạn muốn.

Nếu bạn không quen với mẫu khách truy cập, hãy xem mô tả here. Ngoài ra, nếu bạn chưa đọc nó, cuốn sách "Gang of Four" là một cuốn sách tốt.