В настоящее время я изучаю байт-код Java, и я застрял на части.Приращение значения Java Fied с использованием Objectweb ASM Bytecode
Допустим, у меня есть суперкласс, который содержит целое число currentPos. Я сгенерировал метод, который должен сгенерировать дочерний класс и приращения currentPos, но каким-то образом он бросает ошибку стека стека.
Вот мой код:
runMethod.instructions.add(new FieldInsnNode(GETFIELD, "me/looka/bfc/FooSuperClass", "currentPos", "I"));
runMethod.instructions.add(new InsnNode(ICONST_1));
runMethod.instructions.add(new InsnNode(IADD));
runMethod.instructions.add(new FieldInsnNode(PUTFIELD, "me/looka/bfc/FooSuperClass", "currentPos", "I"));
Это должно увеличивать currentPos права, как она проходит через следующие этапы: Put текущего значения в стек Прибавить значение 1 в стек Добавить оба добавлены значения вместе , вытащите эти 2 значения из стека и добавьте добавленное значение. Установите в поле с текущим значением стека Pop, который добавил значение
Вставьте свой код в свой вопрос, а не ссылку на него. – Michael
Ничего, я исправил код, добавив два кода кода ALOAD_0 в начале кода. Таким образом, GETFIELD вызывается, тогда происходит приращение, потому что есть еще один ALOAD_0, который позволит установить это поле. – lucamasira