Mám kód Java, který je kompilován do souboru .class. Existuje funkce, která získá několik parametrů a provede nějakou akci (např. Get int x a int y a do x + y).
Chci přidat k tomuto souboru .class kód, který kontroluje, zda x = 1 a volání na jinou funkci (např. volání na xy a nedělat x + y)
Jak lze upravit kompilovaný soubor .class a přidat vlastní kód?
Komentáře
- Otázku jsem upravil, doufejme, že právě na toto jste se chtěli zeptat; pokud ne, upřesněte v komentáři nebo jej upravte sami.
Odpověď
Existuje několik způsobů, jak toho dosáhnout:
-
Dekompilovat .class na zdroj .java ( ne nutně původní zdroj, ale ekvivalent), proveďte změny, znovu zkompilujte. Existuje mnoho Java dekompilátorů, všechny je nevypsám.
-
Rozebrat .class na „shromáždění“ (obvykle syntaxe Jasminu), upravit jej, sestavit zpět. Krakatau je dobrý nástroj, který by měl být schopen to udělat.
-
Použijte nástroj, který může upravit / opravte bytecode přímo v souboru .class. Nezkoušel jsem to, ale Recaf tvrdí, že to dokážu.
-
Zahákněte Javu běhový tlumočník, který zachytí okamžik, kdy začne vykonávat cílovou funkci, a přimět ji, aby místo toho provedla něco jiného. Toto je poněkud specifické pro implementaci, ale tady je jeden příklad, o kterém vím, který používá protokol ladění Java (JWDP): „>
https://github.com/CrowdStrike/pyspresso
odpověď
Pomocí JByteMod můžete upravit svůj bajtkód třídy. Můžete také vytvářet nové metody, mazat metody, pole a měnit přístupy.
Je to docela snadné, stačí načíst nádobu a vybrat třídu, kterou chcete upravit.
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
Komentáře
- JByteMod nemá ' bohužel aktualizaci za dva roky. Autor skočil na různé projekty, i když v podobné povaze.