Декомпіляція Java та .NET
Натисніть F3 на скомпільованому файлі — і побачите вихідний код замість байтів. Цим займаються два втулки: один для Java (.class, .jar, .apk, .dex) і один для .NET (.dll, .exe, .winmd, .netmodule), — і поводяться вони однаково, тож ця сторінка описує обидва. Кожен можна вимкнути або вилучити окремо в Конфігурація ▸ Втулки….
Архів показується деревом своїх класів, окремий клас — одним файлом. Декомпілювати у джерела в меню «Команди» записує результат і кладе його в панель, тож у ньому можна шукати, порівнювати й копіювати, як у будь-якій іншій теці з джерелами.
Рушій ви встановлюєте самі¶
Жоден декомпілятор не входить до комплекту, і нічого не завантажується за вас. Це зроблено навмисно з двох причин: JD-Core, найвідоміший декомпілятор Java, поширюється під GPLv3 і не міг би постачатися всередині програми під Apache-2.0 — а рушії стають кращими, і їхня заміна не повинна вимагати нової версії Peach Commander.
Тека рушіїв… у переглядачі відкриває теку, куди вони належать. Тамтешній README називає кожен рушій і його ліцензію.
| Java | CFR, Vineflower, Procyon, jadx (для андроїдних .dex і .apk) та javap для чистого байт-коду |
| .NET | ILSpy і monodis для IL |
Перевірити рушії запускає в кожного рушія команду версії й розрізняє три речі: встановлено і працює, не встановлено, та встановлено, але не може запуститися — інструмент Java без JDK присутній і все одно не стартує, і з’ясовується це лише під час справжнього запуску.
Рушій описується даними, а не кодом, тож ви можете додати власний:
[cfr]
kinds = class, jar
tool = java
args = -jar {engine} {input}
engine = ~/Library/Application Support/PeachCommander/decompilers/cfr.jar
output = stdout
Коли файл до снаги кільком рушіям, використовується перший доступний, якщо ви не виберете конкретний. За двох встановлених Порівняти показує обидва результати поруч — корисно, коли один рушій здається на методі, з яким інший справляється.
Пошук у скомпільованому коді¶
Шукати в усіх класах переглядає декомпільований текст, а не байти, тож у JAR можна знайти рядковий літерал або ім’я методу.
Декомпіляція під час пошуку за вмістом по багатьох файлах — окремий перемикач, типово вимкнений: одержання тексту може означати запуск рушія по разу на кожен клас, що на повільній машині не та витрата, яку варто нести заради пошуку. Головне вікно пошуку запитує окремо; тут це теж відхиляється.
Кеш і обмеження¶
Результати кешуються, бо декомпілювати той самий клас двічі — чисте очікування. У налаштуваннях є, скільки днів зберігати результати, і обмеження розміру кешу; Очистити кеш зараз спорожняє його й повідомляє, скільки звільнилося.
Два часові обмеження захищають від рушія, який не завершується: одне на окремий клас чи тип, друге на цілий архів. Обидва приймають 0, що означає «використати типове значення рушія».