Java Decompiler הוא סוג מיוחד של Decompiler שלוקח קובץ מחלקה כקלט ומייצר קוד מקור של Java כפלט. הפירוק הוא בדיוק תהליך הפוך של קומפילציה. לפיכך, ה-decompiler אינו מייצר העתק של קוד המקור. זה בגלל שמעט מידע אבד מקוד המקור במהלך הידור של התוכנית.
אבל יש הרבה מורכבויות, למשל, קוד Java מובנה, וקוד בתים אינו מובנה. יתר על כן, השינוי אינו אחד לאחד: שתי תוכניות Java שונות עשויות להניב קוד בתים זהה.
ישנם מאחזי ג'אווה הבאים זמינים:
- DJ Java Decompiler
- JReversePro
- יהודים
- JD-CORE/ JD-GUI/ JD Eclipse
Decompiler של JAD
ה-JAD הוא יישום שורת פקודה. זה כתוב ב-C++. הפונקציה העיקרית היא לפרק את קבצי ה-.class. ניתן לפרוס JAD מהמסוף, והוא יפרק מחלקות Java לקוד המקור. בדרך זו, מפתחים יכולים להסתכל עמוק לתוך הקוד של ספריות זמן ריצה של Java ואפילו לייפות את השורות, ולהכין אותם להידור מחדש. קיים סיכון להחלפת קובצי קוד מקור, במיוחד כאשר נעשה שימוש בפרמטר '-o' (החלפת קבצי פלט ללא אישור).
דוגמא
בואו ניצור תוכנית Java פשוטה שמוסיפה שני מספרים.
import java.util.*; class DecompilerDemo { public static void main(String args[]) { int a,b,c; Scanner sc=new Scanner(System.in); System.out.print('Enter the value of a: '); a=sc.nextInt(); System.out.print('Enter the value of b: '); b=sc.nextInt(); c=a+b; System.out.println('sum of a and b is: '+c); } }
בצע את השלבים כדי להמיר את ה-.class לקוד מקור Java קריא. כאן אנו משתמשים במפרק JAD.
שלב 1: הורד את כלי JAD מ https://bit.ly/2XuRzT5
שלב 2: חלץ את קובץ ה-zip וקבל את jad.exe.
שלב 3: צור קובץ .java (DecompilerDemo.java) באותה תיקיה שבה חילצת את קובץ ה-zip.
שלב 4: הידור והפעל את קובץ ה-.java. זה יפיק קובץ .class בתיקייה המתאימה.
שלב 5: כעת העבר את קובץ ה-.class ויישום jad לתיקיה אחרת.
שלב 6: הקלד את הפקודה: jad DecompilerDemo
הפקודה למעלה יוצרת קובץ .jad בתיקייה המתאימה.
שלב 7: הקלד את הפקודה: jad ?s java DecompilerDemo
זה יוצר את קובץ ה-java באותה תיקיה.
פתח את DecompilerDemo.java ונקבל את הקוד הבא:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DecompilerDemo.java import java.io.PrintStream; import java.util.Scanner; class DecompilerDemo { DecompilerDemo() { } public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter the value of a: '); int i = scanner.nextInt(); System.out.print('Enter the value of b: '); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append('sum of a and b is: ').append(k).toString()); } }
אנו יכולים לראות שקובץ .java הכתוב שונה מקובץ ה-.java שנוצר אך נותן את אותו פלט.
קבל אורך מערך ב-c
מפרק קבצי Java Class
פקודת javap
ה javap הוא כלי שורת פקודה של Java שמגיע עם JDK. הוא משמש לפירוק קובץ המחלקה ומדפיס גרסה הניתנת לקריאה על ידי אדם של אותה מחלקה. הפלט שלו תלוי באפשרות המשמשת. מבלי להשתמש בכל אפשרות, javap מדפיסה את החבילה, שדות מוגנים וציבוריים ושיטות של המחלקות המועברות אליה. א javap משמש גם כדי לגלות אילו שיטות זמינות עבור מחלקה אם אין לך את קוד המקור ששימש ליצירת המחלקה. הפורמט הכללי של פקודת javap הוא:
javap [options] filename
אפשרויות
עם פקודת javap, אפשרויות רבות זמינות. חלק מהם הם:
לפרק קובץ מחלקה באמצעות פקודת javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
צור את קובץ הכיתה של התוכנית לעיל והשתמש בפקודה הבאה כדי לפרק את קובץ הכיתה.
javap -c -p DisassembleDemo
תְפוּקָה
הפלט הבא מראה מה יש בקובץ הכיתה.
אבל אנחנו לא מקבלים את קוד המקור של Java באמצעות פקודת javap. אז יש הרבה מפרקים זמינים שממירים קובץ .class לקובץ .java.