Как мне изменить двойной в скомпилированной банке?
У меня есть банка, который содержит строку кода, которая сравнивает два двойных, один из которых имеет значение 0.7
, но я должен быть в состоянии изменить это на 0.0
,
Я не могу использовать отражение или что-то подобное из-за того факта, что это скомпилированный файл JAR (не с открытым исходным кодом), но изменение этого значения имеет решающее значение, потому что, если оно остается в 0.7
Существует огромная проблема с лагом.
Я думал о редактировании байт-кода, но не могу найти никакого хорошего программного обеспечения для этого.
Я ценю любую помощь с этим.
3 ответа
Если вы можете декомпилировать класс, вы можете внести изменения и перекомпилировать его. Затем сверните jarfile с вашим исправленным классом. Насколько это будет легко, зависит от класса и JDK, использованных для его компиляции.
Ссылки: JAD (ссылка на Wiki, потому что JAD в основном мертвый проект, хотя он продолжает работать, когда мне это нужно.) Если вы используете Eclipse, вам может повезти с JD-Eclipse. Есть также проект Procyon, с которым у меня был ограниченный успех.
Посмотрите, как декомпилировать Java-классы программы, а затем пересоберите программное обеспечение самостоятельно.
Как "декомпилировать" файлы классов Java?
Из другого аналогичного вопроса: ( Изменить строковую константу в скомпилированном классе)
Если у вас есть источники для этого класса, то мой подход:
- Получить файл JAR
- Получить источник для одного класса
- Скомпилируйте исходный код с помощью JAR на пути к классам (таким образом, вам не нужно ничего компилировать; не повредит, что JAR уже содержит двоичный файл). Вы можете использовать последнюю версию Java для этого; просто понизить компилятор, используя
-source
а также-target
, - Замените файл класса в JAR новым, используя
jar u
или задача муравья
Помимо использования (Hex) редактора или декомпилятора, use может использовать lib для манипулирования байт-кодом, например asm. Вы даже можете использовать агент предварительной загрузки для преобразования кода на лету.