Pachnie reverse engineeringiem, ale w debuggerze maszyny wirtualne możesz tego nie osiągnąć, chodź można podpiąć 2 debuggery naraz.
Jeden pod maszynę wirtualną drugi pod proces całej maszyny, oba mogą się nawzajem stopować, dając inny poziom abstrakcji.
Jak z tych metod (wywołań metod) wydobyć 'this', instancję obiektu, względem którego metoda pracuje ?
Masz pewnie na myśli pewną strukturę Jest sobie obiekt w jakiejś zmiennej na stosie, wywołuje swoją metodę, w tej metodzie ma inny obiekt, który wywołuje inną metodę, a ta np. dobiera się do jakiegoś adresu.
Jak z końca wywołania na dole, dojść do góry, są hardwarewe breakpointy, można ustawić na adres pamięci, metodę, zmienną.
Breakpoint wywali na operacji, która próbuje się dobrać do tego adresu czyli funkcję wcześniej i tam będziesz miał wyliczenie pointera czyli adres obiektu+ numer_metody, potem ustawiasz pointer na tym adres obiektu, dostajesz metodę wyżej, która to wywołuje, też podobnie jakiś adres pamięci + relatywne przesunięcie w nim.
Można też próbować stosem, return addresy ściągać i sprawdzać jaki op code przed return adressem, return adres jest zawsze następną instrukcją, na którą trzeba wrócić, i to będzie też ta funkcja wyliczająca adres lub skacząca tam bezpośrednio ze stałym adresem.
Adresy mogą też się zmieniać przy różnych wywołaniach tego samego programu.
Chodź te relatywne przesunięcia metod w obiekcie będą zawsze stałe, albo powinny być.
Pewnie mogą być lepsze sposoby, ale dość dobrze trzeba poznać mechanizmy jak wykonują się wszystkie sekwencje, to może pójdzie jakoś lepiej to obejść.
Najlepiej na prostym przypadku małej klasy, dobrze zrozumieć jak to działa, a potem w większe bagno się wpakować.
Nie debuggowałem zbyt dużo jednocześnie w maszynie wirtualnej i debuggując maszynę, ale może jak połączysz obie metody to coś wymyślisz.
W javie takie podejście działało dość dobrze.