Есть ли утилита, похожая на 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 - это Example.i»), но я не могу найти два других «инструмента»:
- Отладчик, который просматривает сами инструкции (со стеком, дампами памяти и т. Д.), Что позволяет мне исследовать фактический код и среду.
- Способ полностью изменить процесс - отредактировать дизассемблированный код и воссоздать файл .class (с отредактированным кодом).