|
|
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Дали исполняемый jar-ник. Просят поменять значение константы в одном из файликов. Исходников нет. Нашли в каком .class файле эта константа. Для этого декомпильнули всё, что внутри джарника нашли. Теперь встаёт вопрос как подменить константу. в .class файле константа явно не хранится. Перекомпильнуть только один файл явно не получится ибо будет ругань на импорты. Декомпильнуть, подправить константу и компильнуть весь проект ? А как ? я ж не знаю как он вообще собирался? какие либы там используются Посоветуйте простой способ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 17:00 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 17:35 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
redwhite90Перекомпильнуть только один файл явно не получится ибо будет ругань на импорты. Действительно ругается или это предположения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 17:39 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
redwhite90, я поддерживаю постановку смены константы. Такие тулзы как декомпиляторы (JD-GUI) захватывают слишком длинный стек операций. Зачастую нам это не нужно когда в коде надо пофиксить константу Код: java 1. на что нибудь другое. Формат classFile https://en.wikipedia.org/wiki/Java_class_file#Sections достаточно прозрачен и документирован чтобы провернуть эту операцию быстро. Без цикла пересборки. Единственный вопрос на который я для себя пока не ответил - это вопрос повторного юзания этой константы из пула констант где-то в других частях байткода. Юзается или нет? Не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 17:45 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Valentin Kolesnikovredwhite90, Попробуйте этот сервис: http://www.javadecompilers.com/ С уважением, Валентин Этот сервис помогает только декомпилировать или я что-то не правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 21:25 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Alexander A. Sakredwhite90Перекомпильнуть только один файл явно не получится ибо будет ругань на импорты. Действительно ругается или это предположения? ну я откровенно говоря не знаю как(javac с какими-то хитрыми ключами?). я в идее клацаю build->rebuild и всё компилится. Тем более структура сорцов обычно не совпадает со структурой билда. Просветите меня) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 21:27 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. P.S. Меняете DEMO с трю на фальсе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 02:21 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
можно добавить аспект ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 09:53 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
redwhite90, А какого типа константа? Что-то тут никто не написал до сих пор про то что константы имеют свойство инлайниться. И тогда только полная перекомпиляция всех зависимостей. Либо, как вариант, взять любой редактор байткода и править без всяких перекомпиляций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 10:20 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Для Oracle CC&B нормально декомпилировал классы, компилировал обратно. Мне кажется, опасения автора топика "не соберется" это от лукавого. Править руками байт код - да ну нах... А кто это будет потом поддерживать, где гарантия, что случайно не запортил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 11:02 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПравить руками байт код - да ну нах... А кто это будет потом поддерживать, где гарантия, что случайно не запортил? Чем запортил, блин??? Исходников у него нет. Пересобирать он jar не собирается. Только если новая версия от вендора будет. А хранить в репозитории правленый бинарник или декомпилированый исходный код особой разницы нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 11:07 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
По поводу числовых констант (integer). У меня есть предположение почему автор из не видит. Некоторые быстрые команды прогрузки целого на стек от -1 до 5 идут отдельными байткодами без операнда. https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf Код: java 1. 2. 3. 4. 5. 6. 7. Те - которые с операндом - скорее всего имеют длину = 1 опкод + sizeof(int) байтов и их надо курить отдельно... опять-же помня о big-endian и помня об оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 11:30 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Код: plaintext 1. P.S. Меняете DEMO с трю на фальсе? автор.... GUI.java:126: ';' expected btnSelectTool.addActionListener((ActionListener)new /* Unavailable Anonymous Inner Class!! */); ^ 100 errors меняем одну строку на другую. Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 12:31 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
Лекомпильнул весь джарник и получил авторDecompiled with CFR 0_114 com.orsoncharts.util.json.parser.Yylex ---------------------------- yylex() Unable to fully structure code ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 12:52 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
questioner Код: plaintext 1. 2. 3. P.S. Если строку заменить, то ищите то, что умеет редактировать class-файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 02:42 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 05:13 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
redwhite90Посоветуйте простой способ- Декомпилируем необходимый class-файл: меняем значение нужной нам константы... - Добавляем класс в свой проект: имя класса, имя пакета должны быть такими, как в исп. JAR-нике! - Исполняемый JAR-ник подключается как зависимость (остальные зависимости этого класса будут подтягиваться с исп. JAR-ника!) - После сборки проекта, добавленный в проект класс "заменит" тот, что в исп. JAR-нике! (скорее всего на уровне ClassLoader-а) - Профит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2016, 02:43 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
1. Не надо автоматизировать разовые операции; 2. Проблема топикстартера в том, что декомпилятор не справляется с куском байт-кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2016, 17:38 |
|
||
|
Поменять константу строки в скомпилированном файле.
|
|||
|---|---|---|---|
|
#18+
redwhite90Нашли в каком .class файле эта константа. ... в .class файле константа явно не хранится. Константы хранятся явно в .class файлах, в constant pool'e. Так вы нашли в каком .class файле эта константа хранится, или нет? Сначала надо найти .class файл, затем подредактировать любым бинарным редактором. Если константа числовая, то просто меняете байты. Если строковая, то еще надо скорректировать байты, содержащие длину строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2016, 19:46 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=94&tid=2123972]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 359ms |

| 0 / 0 |
