Ваше решение должно быть на Java?Вы можете использовать Jawa для достижения того же в Python с гораздо меньшим количеством шаблонов, чем ASM и его эквиваленты.
Установите его: pip install jawa
Затем:
from jawa.constants import String
from jawa.classloader import ClassLoader
# Create a ClassLoader for the current directory
# and load your "test" class.
test = ClassLoader('.')['test']
# Find the first String with the value "Hello"
# in the constant pool.
constant = test.constants.find_one(
type_=String,
f=lambda c: c.string.value == 'Hello'
)
# Change it to your new value
constant.string.value = 'Hi'
# ... and save the new class.
with open('test.class', 'wb') as new_test:
test.save(new_test)
Результат:
$ java test
Hi
Полная документация на http://jawa.tkte.ch. Независимо от того, каким инструментом вы в конечном итоге пользуетесь, абсолютно необходимо прочитать спецификацию JVM ClassFile, иначе вы действительно не поймете, что происходит.Вы можете найти его на https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-4.html.