sonyps4.ru

Как растаращить class-файл. Файл с расширением.class

Редактирование class файлов – «больная» для большинства модмейкеров тема, ведь что бы достигнуть определенного результат в этом деле нужно не только иметь начальные знания программирования, а еще и терпение и усидчивость, ибо большинство параметров определяется «методом тыка».
На данный момент модмейкеров, которые умеют и любят редактировать class файлы, почти не осталось, поэтому я и решил написать данный урок.
Процесс редактирования класс файлов моим методом можно условно поделить на четыре этапа:
I. Дешифровка class файла
II. Редактирование class файла
III. Шифрование class файла
IV. Оптимизация class файла для выполнения на устройствах (научно выражаясь, преверификация)

Для начала нам нужно скачать KEmulator любой версии(ну я надеюсь он есть у всех) и пак программ, ссылку на который я напишу в конце статьи. Скачали? Ну тогда начинаем.

Для удобства мы начнем с создания каталогов, которые просто необходимые в данной ситуации, ибо если все бросать в одну папку, то рано или поздно можно запутаться и потерять отредактированный class файл. Для этого проходим по пути …\KEmulator\file\root\ , если вдруг папки file нет, то берем и создаем её. После того, как открыли папку root, создаем в ней папки со следующими названиями:
сlass – эта папка будет содержать в себе оригинальные class файлы
j – эта папка будет содержать дешифрированные class файлы
nclass – эта будет содержать отредактированные class файлы
ver – эта будет содержать преверифицированные class файлы
т.е. в конечном итоге у вас должно получится что-то похожее


После создания каталогов мы можем приступать к редактированию class файлов. Для начала копируем необходимый class файл и запускаем программу d2j.jar в kemulator’e. Сразу же, без всяких церемоний, мы видим окно с двумя полями для ввода адресов
В первом поле мы вводим адрес class файла т.е. «\root\class\*.class», где *- название класса
Во втором поле мы вводим адрес папки, в которой будет сохранен дешифрированный class, в нашем случае это «\root\j\»

После ввода путей, нажимаем кнопочку, которая находится в правом нижнем углу или клавишу F2. После пары секунд раздумий, программа выдаст нам желаемый результат
На этом с дешифрацией class файла покончено.


После того, как мы выполнили дешифрацию класс файла, в папке j появится файл с названием *.j, где * - название класс файла. Файлы формата.j можно открывать стандартным блокнотом Windows, хотя я рекомендую использовать WordPad, так как он поддерживает форматирование текста, из чего следует повышение вашего комфорта.
Описывать куда, что и как нужно изменить в class’е для получения результата, я не буду, так как на эту тему написан не один десяток статей и для каждой игры свои особенности их редактирования. После внесения изменений не забываем сохраниться.


Шифрование, как вы уже должны были догадаться, этот процесс обратный дешифрованию, поэтому на вход мы дадим файл формата.j, а на выходе получим заветный. class.
Для начала мы запускаем j.jar в kemulator’е и видим подобное окно с двумя полями для ввода адресов
В первом поле мы указываем адрес к.j файлу т.е. к тому, который мы открывали и редактировали в WordPad’e. В нашем случае путь будет выглядеть так «\root\j\*.j» где * - название.j файла
Во втором поле мы указываем адрес к папке, в которой будет храниться новый class файл. В нашем случае адрес будет выглядеть так «\root\nclass\».
После ввода путей нажимаем кнопку в правом нижнем углу или клавишу F2. В результате у Вас должно выскочить подобное уведомление.


После получения class файла в 3ем пункте, нам необходимо выполнить преверификацию. Это необходимо для оптимизации class файла, что бы мод мог спокойно работать на мобильных телефонах, т.е. для внутренних тестов на kemulator’e её можно не выполнять.
Что бы выполнить преверификацию, мы запускаем preverifier.jar в kemulator’e и видим такое окно с двумя полями для ввода адресов.
В первом поле мы указываем адрес к папке с новым class файлом, в нашем случае это «\root\nclass\»
Во втором указываем путь к папке, в которой будут хранится преверифицированные class файлы. В нашем случае это «\root\ver\»
После ввода путей нажимаем кнопку в правом нижнем углу или клавишу F2. В результате у Вас должно выскочить подобное уведомление.Хочу обратить Ваше внимание на то, что на выходе мы получим class с добавленной в название приставкой в виде названия папки. В нашем случае это выглядит так *class>ver*.class. Разумеется перед возвращением файла на его законное место, эту приставку нужно убрать.


Итог
В данной статье я попытался подробно расписать один из методов редактирования class файлов. Разумеется, имеются и другие, более простые методы редактирования, но зачастую они просты лишь снаружи и не дают возможности воплотить все мысли модмейкера или просто не до конца выполняют свою работу, например, не производят преверификацию class файла.

Описание файла CLASS

All such files that comprise of the .CLASS extension is mainly associated with file formats that have been written using the Java programming language. All of these files are then compiled using the bytecode class program. Once different Java source code files are compiled, these files are created.

The different source code files from Java are then compiled together to generate the .CLASS files that are then loaded into the Java Virtual Machine. The machine then executes the program that the codes have been written for. It is imperative to take into account that because the Java Virtual Machine has several different versions, not all the .CLASS extension files are compatible with every single version.

Основная информация о файле CLASS

Файл CLASS является одним из файлов категории Файлы разработчика. Его полное название это Java Class File. Формат файла CLASS создан Oracle. Если вы попали к нам, наверное Вы ищете программы, которые помогут Вам работать с этим конкретным расширением. На следующих страницах вы найдете списки программ, поддерживающих файл CLASS сортированные по операционных системах. Если наша база данных содержит информацию о конвертировании файла CLASS, Вы обязательно найдете его здесь.

Теги: расширение CLASS, как открыть файл CLASS, как конвертировать файл CLASS, открытие файла CLASS

Мы надеемся, что помогли Вам решить проблему с файлом CLASS. Если Вы не знаете, где можно скачать приложение из нашего списка, нажмите на ссылку (это название программы) - Вы найдете более подробную информацию относительно места, откуда загрузить безопасную установочную версию необходимого приложения.

Посещение этой страницы должно помочь Вам ответить конкретно на эти, или похожие вопросы:

  • Как открыть файл с расширением CLASS?
  • Как провести конвертирование файла CLASS в другой формат?
  • Что такое расширение формата файлов CLASS?
  • Какие программы обслуживают файл CLASS?
Если после просмотра материалов на этой странице, Вы по-прежнему не получили удовлетворительного ответа на какой-либо из представленных выше вопросов, это значит что представленная здесь информация о файле CLASS неполная. Свяжитесь с нами, используя контактный формуляр и напишите, какую информацию Вы не нашли.

Что еще может вызвать проблемы?

Поводов того, что Вы не можете открыть файл CLASS может быть больше (не только отсутствие соответствующего приложения).
Во-первых - файл CLASS может быть неправильно связан (несовместим) с установленным приложением для его обслуживания. В таком случае Вам необходимо самостоятельно изменить эту связь. С этой целью нажмите правую кнопку мышки на файле CLASS, который Вы хотите редактировать, нажмите опцию "Открыть с помощью" а затем выберите из списка программу, которую Вы установили. После такого действия, проблемы с открытием файла CLASS должны полностью исчезнуть.
Во вторых - файл, который Вы хотите открыть может быть просто поврежден. В таком случае лучше всего будет найти новую его версию, или скачать его повторно с того же источника (возможно по какому-то поводу в предыдущей сессии скачивание файла CLASS не закончилось и он не может быть правильно открыт). Если у Вас есть дополнительная информация о расширение файла CLASS мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся

Обычно при компиляции Java-файла получаются.class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать.class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре . Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.

Я компилировал с помощью Oracle javac 1.7.0.60 и 1.8.0.25, результаты практически не отличались. Путь для исключения формируется даже в том случае, если в блоке try совсем ничего предосудительного. Например, присваивание целочисленной константы в локальную переменную - это две инструкции iconst и istore , ни про одну из них в спецификации не сказано, что они могут сгенерировать исключение. Так и будем писать:
class A {{ int a; try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { try {a=0;} finally { a=0; }}}}}}}}}}}} }}
Добавление нового нетривиального кода в самый внутренний finally вызывает ошибку компиляции code too large, поэтому ограничимся таким. Если кто-то подзабыл, это у нас блок инициализации , который подклеивается к каждому конструктору. Для нашей задачи метод объявлять смысла нет.

Такой исходник занимает 336 байт, а получившийся class-файл растаращило до 6 571 429 байт, то есть в 19 557 раз (назовём это коэффициентом растаращивания). Даже при отключении всей отладочной информации с помощью -g:none class-файл весит 6 522 221 байт, что ненамного меньше. Посмотрим, что внутри с помощью утилиты javap .

Пул констант
Пул констант получился небольшой: всего 16 записей. По сути всё самое необходимое: имена атрибутов типа Code, имя класса, Java-файла, ссылка на конструктор родительского класса Object и т. д. При отключении отладочной информации исчезают три записи: имена атрибутов LineNumberTable, SourceFile и значение A.java для атрибута SourceFile.
Код
Код конструктора по умолчанию составил 64507 байт, почти упираясь в максимально допустимый предел. Начинается он с нормального выполнения:

Код

0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: iconst_0 5: istore_1 6: iconst_0 7: istore_1 8: iconst_0 9: istore_1 10: iconst_0 11: istore_1 12: iconst_0 13: istore_1 14: iconst_0 15: istore_1 16: iconst_0 17: istore_1 18: iconst_0 19: istore_1 20: iconst_0 21: istore_1 22: iconst_0 23: istore_1 24: iconst_0 25: istore_1 26: iconst_0 27: istore_1 28: iconst_0 29: istore_1 30: goto 38


То есть вызывается конструктор родительского класса, а затем 13 раз записывается единица в первую локальную переменную. После этого начинается длинная цепочка goto, которая обходит мимо всех остальных копий finally: 30->38->58->104->198->388->770->1536->3074->7168->15358->31740->64506, а по адресу 64506 мы находим долгожданную инструкцию return.

В промежутках между этими goto всевозможные комбинации нормальных и исключительных завершений каждого блока try. Неожиданным оказалось то, что для каждого finally, обрабатывающего исключение, для хранения исключения создаётся новая локальная переменная, даже если блоки заведомо взаимоисключающие. Из-за этого коду требуется 4097 локальных переменных. Небольшая статистика по инструкциям:

  • iconst_1 - 8191 раз
  • istore_1 - 8191 раз
  • goto - 4095 раз
  • athrow - 4095 раз
  • astore_2/aload_2 - 1 раз
  • astore_3/aload_3 - 1 раз
  • astore/aload - 252 раза (локальные переменные с номерами от 4 до 255)
  • astore_w/aload_w - 3841 раз (локальные переменные с номерами больше 255)
Плюс один aload_0, один invokespecial и один return - итого 32765 инструкций. Желающие могут нарисовать граф потока управления и повесить на стенку.
Таблица исключений
Таблица исключений содержит записи вида (start_pc, end_pc, handler_pc, catch_type) и говорит виртуальной машине «если при выполнении инструкций от адреса start_pc до адреса end_pc произошло исключение типа catch_type, то передай управление на адрес handler_pc». В данном случае catch_type везде равен any, то есть исключения любого типа. Записей в таблице 8188 и занимает она примерно столько же, сколько и код - около 64 килобайт. Начало выглядит так:
from to target type 26 28 33 any 24 26 41 any 42 44 49 any 49 51 49 any 22 24 61 any
Таблица номеров строк
Таблица номеров строк - это отладочная информация, сопоставляющая адресам инструкций байткода номера строк в исходнике. В ней 12288 записей и чаще всего попадаются ссылки на строчку с самым внутренним finally. Занимает она около 48 килобайт.
StackMapTable
Куда же ушло всё остальное место? Его заняла таблица StackMapTable , которая необходима для верификации class-файла. Если совсем грубо, для каждой точки ветвления в коде эта таблица содержит типы элементов в стеке и типы локальных переменных в данной точке. Так как локальных переменных у нас очень много и точек ветвления тоже, размер этой таблицы растёт квадратично от размера кода. Если бы локальные переменные для исключений в непересекающихся ветках переиспользовались, их бы потребовалось всего 13 и таблица StackMapTable была бы куда скромнее по размерам.
Таращим дальше
Можно ли растаращить class-файл ещё сильнее? Конечно, можно раскопировать метод, содержащий вложенные try-finally. Но компилятор вполне может сделать это за нас. Вспомните, что блок инициализации приклеивается к каждому конструктору автоматически. Достаточно добавить в код много пустых конструкторов с разными сигнатурами. Здесь будьте осторожны, а то у компилятора кончится память. Ну вот так можно скромненько написать, упаковав код в одну строчку:

Class A{{int a;try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{a=0;}}}}}}}}}}}}}A(){}A(int a){}A(char a){}A(double a){}A(float a){}A(long a){}A(short a){}A(boolean a){}A(String a){}A(Integer a){}A(Float a){}A(Short a){}A(Long a){}A(Double a){}A(Boolean a){}A(Character a){}}
Здесь у меня 16 конструкторов, исходник занимает 430 байт . После компиляции имеем 104 450 071 байт , коэффициент растаращивания составил 242 907 . И это не предел!

Компилированный файл.JAVA, созданный компилятором Java. Содержит байтовый код являющийся бинарным программным кодом, выполняемым при запуске Java Virtual Machine (JVM). Обычно встраивается в файлы.JAR, которые входят в состав среды $CLASSPATH, подходящей для исполнения.

Файлы CLASS можно компилировать из файлов JAVA при помощи команды javac, входящей в состав пакета инсталляции JVM. Многие интегрированные среды разработки Java, такие как Eclipse, могут компилировать файлы CLASS на ходу, пока разработчики пишут программный код.

Поскольку существует множество версий JVM (например, 1.4, 1.5 и 1.6), некоторые файлы CLASS могут быть несовместимы с определенными версиями JVM. Java Runtime Environment (JRE) может выполнять файлы CLASS, но не может компилировать их, поскольку не включает в себя бинарный javac.

Примечание: компания Oracle приобрела Sun Microsystems - изначального разработчика Java. JRE и JVM часто используются как синонимы для ссылок на платформу, запускающую приложения Java.

Расширение файла.class представляет собой файл класса Java. Данный файл может быть открыт с помощью следующих программ: Oracle Java Runtime Environment, Eclipse IDE for Java Developers с подключаемым модулем JD-Eclipse, dirtyJOE, JD-GUI.

Самой частой причиной проблем с раскрытием файла CLASS является просто отсутствие соответствующих приложений, установленных на Вашем компьютере. В таком случае достаточно найти, скачать и установить приложение, обслуживающее файлы в формате CLASS - такие программы доступны ниже.

Поисковая система

Введите расширение файла

Помощь

Подсказка

Необходимо учесть, что некоторые закодированные данные из файлов, которые наш компьютер не читает, иногда можно просмотреть в Блокноте. Таким образом мы прочитаем фрагменты текста или числа - Стоит проверить, действует ли этот метод также в случае файлов CLASS.

Что сделать, если приложение со списка уже было установлено?

Часто установленное приложение должно автоматически связаться с файлом CLASS. Если это не произошло, то файл CLASS успешно можно связать вручную с ново установленным приложением. Достаточно нажать правой кнопкой мышки на файл CLASS, а затем среди доступных выбрать опцию "Выбрать программу по умолчанию". Затем необходимо выбрать опцию "Просмотреть" и отыскать избранное приложение. Введенные изменения необходимо утвердить с помощью опции "OK".

Программы, открывающие файл CLASS

Windows
Mac OS
Linux

Почему я не могу открыть файл CLASS?

Проблемы с файлами CLASS могут иметь также другую почву. Иногда даже установление на компьютере программного обеспечения, обслуживающего файлы CLASS не решит проблему. Причиной невозможности открытия, а также работы с файлом CLASS может быть также:

Несоответственные связи файла CLASS в записях реестра
- повреждение файла CLASS, который мы открываем
- инфицирование файла CLASS (вирусы)
- слишком маленький ресурс компьютера
- неактуальные драйверы
- устранение расширения CLASS из реестра системы Windows
- незавершенная установка программы, обслуживающей расширение CLASS

Устранение этих проблем должно привести к свободному открытию и работе с файлами CLASS. В случае, если компьютер по-прежнему имеет проблемы с файлами, необходимо воспользоваться помощью эксперта, который установит точную причину.

Мой компьютер не показывает расширений файлов, что сделать?

В стандартных установках системы Windows пользователь компьютера не видит расширения файлов CLASS. Это успешно можно изменить в настройках. Достаточно войти в "Панель управления" и выбрать "Вид и персонализация". Затем необходимо войти в "Опции папок", и открыть "Вид". В закладке "Вид" находится опция "Укрыть расширения известных типов файлов" - необходимо выбрать эту опцию и подтвердить операцию нажатием кнопки "OK". В этот момент расширения всех файлов, в том числе CLASS должны появится сортированные по названию файла.



Загрузка...