it-swarm-vi.tech

Làm cách nào tôi có thể mở các tệp Java. Class theo cách có thể đọc được?

Tôi đang cố gắng tìm hiểu xem tệp lớp của một applet Java đang làm gì dưới mui xe. Mở nó lên bằng Notepad hoặc Textpad chỉ cho thấy một loạt các gobbledy-gook.

Có cách nào để sắp xếp nó trở lại thành một định dạng dễ đọc để tôi có thể thử tìm hiểu xem nó đang làm gì không?

  • Môi trường == Windows w/VS 2008 đã cài đặt.
96
cpuguru

jd-gui là trình dịch ngược tốt nhất tại thời điểm này. nó có thể xử lý các tính năng mới hơn trong Java, so với JAD bụi bặm.

195
DarenW

Nếu bạn không phiền khi đọc mã byte, javap sẽ hoạt động tốt. Đây là một phần của bản cài đặt JDK tiêu chuẩn.

Usage: javap <options> <classes>...

where options include:
   -c                        Disassemble the code
   -classpath <pathlist>     Specify where to find user class files
   -extdirs <dirs>           Override location of installed extensions
   -help                     Print this usage message
   -J<flag>                  Pass <flag> directly to the runtime system
   -l                        Print line number and local variable tables
   -public                   Show only public classes and members
   -protected                Show protected/public classes and members
   -package                  Show package/protected/public classes
                             and members (default)
   -private                  Show all classes and members
   -s                        Print internal type signatures
   -bootclasspath <pathlist> Override location of class files loaded
                             by the bootstrap class loader
   -verbose                  Print stack size, number of locals and args for methods
                             If verifying, print reasons for failure
68
Michael Myers

Bạn muốn một trình dịch ngược Java, bạn có thể sử dụng công cụ dòng lệnh javap để làm điều này. Ngoài ra, Trình dịch ngược Java HƯỚNG DẪN mô tả cách bạn có thể dịch ngược tệp lớp.

7
Drew Frezell

Sử dụng Jad để dịch ngược có lẽ là lựa chọn tốt nhất của bạn. Trừ khi mã đã bị xáo trộn, nó sẽ tạo ra một kết quả ổn.

2
Rasmus Faber

những gì bạn đang tìm kiếm là một trình biên dịch Java. Tôi khuyên dùng JAD http://www.kpdus.com/jad.html Nó miễn phí cho sử dụng phi thương mại và hoàn thành công việc. 

Lưu ý: điều này sẽ không làm cho mã giống hệt như những gì đã được viết. tức là bạn sẽ mất bình luận và có thể là tên biến, vì vậy sẽ khó hơn một chút so với việc chỉ đọc mã nguồn thông thường. Nếu nhà phát triển thực sự bí mật, họ cũng sẽ làm xáo trộn mã của họ, khiến nó càng khó đọc hơn. 

2
David Beleznay

cpuguru, nếu applet của bạn đã được biên dịch bằng javac 1.3 (hoặc ít hơn), tùy chọn tốt nhất của bạn là sử dụng Jad.

Thật không may, JDK cuối cùng được hỗ trợ bởi JAD 1.5.8 (ngày 14 tháng 4 năm 2001) là JDK 1.3.

Nếu applet của bạn đã được biên dịch với trình biên dịch gần đây hơn, bạn có thể thử JD-GUI : trình dịch ngược này đang được phát triển, tuy nhiên, nó tạo ra các nguồn Java chính xác, hầu hết thời gian, cho các lớp được biên dịch với JDK 1.4, 1.5 hoặc 1.6.

DarenW, cảm ơn bạn cho bài viết của bạn. JD-GUI chưa phải là trình dịch ngược tốt nhất ... nhưng tôi đang làm việc trên :)

2
Emmanuel Dupuy

Nếu tệp lớp bạn muốn xem là nguồn mở, bạn không nên dịch ngược nó, mà thay vào đó hãy đính kèm các tệp nguồn trực tiếp vào IDE của bạn. bằng cách đó, bạn chỉ có thể xem mã của một số lớp thư viện như thể nó là của riêng bạn

1
arturh

Đó là mã được biên dịch, bạn sẽ cần sử dụng trình dịch ngược như JAD: http://www.kpdus.com/jad.html

1
cynicalman

Bạn cần sử dụng một trình dịch ngược. Những người khác đã đề xuất JAD, có những lựa chọn khác, JAD là tốt nhất.

Tôi sẽ lặp lại ý kiến ​​rằng bạn có thể mất một chút so với mã nguồn ban đầu. Nó sẽ trông đặc biệt buồn cười nếu mã sử dụng thuốc generic, do bị xóa.

1
Zac Gochenour

Như @MichaelMyer đã chỉ ra, hãy sử dụng 

javap -c <name of Java class file> 

để lấy mã hội JVM. Bạn cũng có thể chuyển hướng đầu ra thành một tệp văn bản để nhìn rõ hơn.

javap -c <name of Java class file> > decompiled.txt
1
Nilashish C

jd-gui " http://code.google.com.vn/p/innlab/doads/detail?name=jd-gui-0.3.3.windows.Zip&can=2&q= " là tùy chọn tốt nhất và thân thiện với người dùng để dịch ngược tệp. class ....

1

Chắc chắn, plugin JAD và/hoặc JADclipse Eclipse.

1
John Gardner

bạn cũng có thể sử dụng các trình dịch ngược Java trực tuyến có sẵn. Ví dụ: http://www.javadecompilers.com

0
Prachi Sharma

Không cần phải dịch ngược Applet. Class. Các lớp API Java công khai có mã nguồn đi kèm với JDK (nếu bạn chọn cài đặt nó) và có thể đọc tốt hơn so với mã biên dịch mã. Bạn có thể tìm thấy nén trong src.Zip (nằm trong thư mục cài đặt JDK của bạn).

0
Arno

Theo đề xuất, bạn có thể sử dụng JAD để dịch ngược và xem các tệp. Để dễ đọc hơn, bạn có thể sử dụng plugin JADclipse cho Eclipse để tích hợp JAD trực tiếp vào Eclipse hoặc sử dụng Trình dịch ngược Java DJ dễ sử dụng hơn JAD dòng lệnh

0
amitwadhwa

JAD là một tùy chọn tuyệt vời nếu bạn muốn mã Java có thể đọc được. Nếu bạn thực sự muốn tìm hiểu nội bộ của định dạng tệp .class, bạn sẽ muốn javap. Nó được gói cùng với JDK và cho phép bạn "dịch ngược" mã byte thập lục phân thành ASCII có thể đọc được. Ngôn ngữ mà nó tạo ra vẫn là mã byte (không phải bất cứ thứ gì như Java), nhưng nó khá dễ đọc và cực kỳ hướng dẫn.

Ngoài ra, nếu bạn thực sự muốn, bạn có thể mở bất kỳ tệp .class nào trong trình soạn thảo hex và đọc trực tiếp mã byte. Kết quả giống hệt với việc sử dụng javap.

0
Daniel Spiewak

CFR - một trình dịch ngược Java khác là một trình dịch ngược tuyệt vời cho Java hiện đại được viết i Java 6.

0
tidbeck