byte-code/decompiled code level debugging, dynamicznie generowany kod

0

Rozwiązywałem sobie wczoraj zadanie z .netowego reverse engineeringu przy użyciu dnSpy i naszła mnie taka myśl, czy w Javie istnieją narzędzia o podobnych możliwościach.
W tym konkretnym przypadku w zadaniu generowana była dynamicznie klasa z jakąśtam metodą, refleksją tworzona instancja i metoda wywoływana.
I teraz gdyby to była java, to jedyny sposób jaki znam, żeby coś z tym zrobić, to wpiąć debugger po tym jak wygenerowano/odszyfrowano bajtkod klasy, zrzucić to do pliku i potem otworzyć sobie taki plik .class i popatrzeć na bajtkod/wynik dekompilacji. I jakbyśmy chcieli po tym debugować, to trzeba by to wrzucić sobie do projektu jako libkę i zrobić jakiegoś maina który to zawoła.
A taki dnSpy pozwolił po prostu zrobić step into debuggerem i zrobił to wszystko automatycznie, tzn. pokazał mi faktycznie w jakim kodzie wylądowałem i mogłem sobie po nim nadal wygodnie debugować, mimo że ten kod istniał tylko w pamięci.

IntelliJ pozwala pokazać bajtkod klasy, dekompiluje pliki .class w locie i pozwala po nich debugować, ale nie tyczy się to kodu dynamicznie wrzuconego do classloadera w runtime. Możemy zrobić step into ale nie pokaże nam ani bajtkodu ani tym bardziej jego zdekompilowanej postaci, więc możemy co najwyżej stepować sobie na ślepo.

Jest jakiś magiczny tool o którym nie wiem? :) Jest to o tyle ciekawe, że Java ma całą masę bibliotek o frameworków które robią modyfikacje / generacje kodu w runtime (wszelkie aop, dynamiczne proxy itd).

0

Może https://bytebuddy.net/ dałby tutaj rade

1 użytkowników online, w tym zalogowanych: 0, gości: 1