Есть ли утилита, похожая на OllyDbg/SoftICE для java? То есть выполнить класс (из jar/с помощью пути к классу) и без исходного кода показать разборку промежуточного кода с возможностью переходить/перешагивать/искать ссылки/редактировать определенный промежуточный код в памяти/применять редактирование в файл...
Если нет, можно ли даже написать что-то вроде этого (предполагая, что мы готовы жить без горячей точки для продолжительности отладки)?
Изменить: Я не говорю о JAD или JD или Cavaj. Это прекрасные декомпиляторы, но я не хочу декомпилятор по нескольким причинам, наиболее примечательным является то, что их вывод неверен (в лучшем случае, иногда просто неправильно). Я не ищу магические "скомпилированные байты в Java-код". Я хочу увидеть фактические байты, которые будут выполнены. Кроме того, мне бы хотелось изменить эти байты (как в отладчике сборки) и, надеюсь, записать измененную часть обратно в файл класса.
Edit2: Я знаю, что javap существует, но он делает только один способ (и без какого-либо анализа). Пример (код, взятый из документации vmspec): Из java-кода мы используем "javac" для компиляции:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
в файл java.class. Используя javap -c, я могу получить этот вывод:
Method void setIt(int)
0 aload_0
1 iload_1
2 putfield #4
5 return
Method int getIt()
0 aload_0
1 getfield #4
4 ireturn
Это нормально для части разборки (не очень хорошо без анализа - "поле №4 - пример .i" ), но я не могу найти два других "инструментария":
- Отладчик, который обрабатывает сами инструкции (со стек, дампы памяти и т.д.), позволяет мне проверить фактический код и среду.
- Способ изменения процесса - отредактируйте дизассемблированный код и заново создайте файл .class(с отредактированным кодом).