W moim projekcie instrumentacji kodu bajtowego często wpadam na VerifyErrors. Jednak domyślny weryfikator java podaje niewiele informacji o tym, która instrukcja spowodowała błąd (podaje tylko metodę i małą wiadomość). Czy istnieje jakiś samodzielny weryfikator kodu bajtowego, który zapewnia nieco bardziej zaawansowaną pomoc w lokalizowaniu błędu, a przynajmniej dokładną lokalizację instrukcji? Dziękuję Ci.Autonomiczny weryfikator kodu bajtowego
Odpowiedz
ASM CheckClassAdaptor.verify() daje bardzo cenna: http://asm.ow2.org/
Byłem też szukają czegoś, co byłoby zgłaszać potencjalne zweryfikować błędy, ale szczególnie IncompatibleClassChangeError
s. Napisałem mały projekt testowy z jedną klasą API i kolejnymi metodami API wywołującymi klasę klienta oraz główną klasą do uruchomienia weryfikatora; następnie zmienił API, rekompilował go, ale nie klienta, i sprawdził, co może zostać przechwycone. Używane -target 7
, chociaż nie ma specjalnych funkcji JDK 7 na teraz.
Po pierwsze i najbardziej oczywiste, Class.forName
może znaleźć pewne błędy w sygnaturze klasy klienta, ale nie wydaje się sprawdzać ciał metod dla wywołań do nieistniejących metod API i tym podobnych, nawet jeśli wywołasz getDeclaredMethods
; błędy są zgłaszane przez VM tylko wtedy, gdy problematyczny wiersz kodu jest faktycznie uruchamiany.
Justin w BCEL 5.2 wydaje się najłatwiejszy;
org.apache.bcel.verifier.Verifier.main(new String[] {clazz});
spełnia swoje zadanie:
Pass 3a, method number 1 ['public void m()']:
VERIFIED_REJECTED
Instruction invokestatic[184](3) 4 constraint violated:
Referenced method 'x' with expected signature '()V' not found in class 'API'.
....
próbowałem ASM 4.0, ale
org.objectweb.asm.util.CheckClassAdapter.main(new String[] {clazz});
nie działa; być może sprawdza format metod, ale nie łączy. Podpisywanie main
i przekazywanie checkDataFlow=true
nie pomaga.
Wyszukiwanie, Znalazłem także https://kenai.com/hg/maxine~maxine/file/8429d3ebc036/com.oracle.max.vm/test/test/com/sun/max/vm/verifier/CommandLineVerifier.java, ale nie mogłem znaleźć żadnego sposobu, aby to zadziałało; towarzyszący test jednostkowy rzuca po uruchomieniu ClassNotFoundException
.
- 1. Wizualizator kodu bajtowego Java
- 2. Analiza kodu bajtowego w Javie
- 3. Dekompilowanie plików kodu bajtowego OCaml
- 4. CPython to interpreter kodu bajtowego?
- 5. Szyfrowanie kodu bajtowego jest bezpieczne
- 6. Jakie są motywy kompilacji kodu bajtowego?
- 7. Wyświetlanie wygenerowane przez bajt kodu bajtowego
- 8. Sens „>>” w Pythonie kodu bajtowego
- 9. Obfuscowanie kodu bajtowego python poprzez mutację interpretera
- 10. Kod powrotu celu IntelliJ dla kodu bajtowego
- 11. Obowiązki weryfikatora kodu JVM
- 12. Jak odzyskać weryfikator formularza
- 13. Tworzenie kodu bajtowego Pythona z listy kodów i argumentów?
- 14. Jak skompilować kod zestawu JVM do kodu bajtowego?
- 15. Zmienne remapper podczas metody kodu bajtowego Inlining przez ASM
- 16. Czy możliwe jest przeglądanie plików klasy Java według kodu bajtowego
- 17. Generowanie kodu bajtowego JVM dla jednoargumentowego nie wyrażenia
- 18. Dowolny C/C++ na natywny kompilator/interpretatory kodu bajtowego?
- 19. Odczytywanie instrukcji kodu bajtowego Java: Co oznacza ta liczba?
- 20. Najlepsze narzędzie (narzędzia) do dekompilacji kodu bajtowego Lua?
- 21. Niezgodny argument do funkcji z instrumentacją kodu bajtowego ASM
- 22. Selen serwer autonomiczny nie wychodząc
- 23. JSF weryfikator większy niż zero
- 24. Działa autonomiczny groovy skrypt z netbeans
- 25. Autonomiczny system do tworzenia projektów Visual Studio
- 26. Autonomiczny zakres transakcji i podnoszenie błędów
- 27. C# porównanie 3 bajtowego pola
- 28. Dlaczego otrzymuję komunikat "Nieznany weryfikator:" MessageValidator ""?
- 29. Weryfikator niestandardowy wystrzeliwuje, ale nie zapobiega odreagowaniu
- 30. Jak skonfigurować autonomiczny silnik Google v5 javascript do zdalnego debugowania?
Dlaczego o tym nie pomyślałem. W rzeczywistości używam BCEL, ale nigdy nie zdarzyło mi się, aby sprawdzić jego weryfikatora. W rzeczywistości ma on nazwę JustIce. –